বিভাজনীয় স্ট্রাক


31

আমরা বিভাজ্যতা স্ট্রিক বর্ণনা করতে পারেন kএকটি সংখ্যা nপূর্ণসংখ্যা ক্ষুদ্রতম অ নেতিবাচক ফাইন্ডিং দ্বারা kযেমন যে n+kদ্বারা বিভাজ্য নয় k+1

চ্যালেঞ্জ

আপনার পছন্দের ভাষায়, এমন একটি প্রোগ্রাম বা ফাংশন লিখুন যা আপনার ইনপুটটির বিভাজনীয় স্ট্রাককে আউটপুট দেয় বা প্রদান করে।

উদাহরণ:

n=13:
13 is divisible by 1 
14 is divisible by 2 
15 is divisible by 3 
16 is divisible by 4 
17 is not divisible by 5

এর Divisibilty স্ট্রিক 13হয়4

n=120:
120 is divisible by 1 
121 is not divisible by 2 

এর Divisibilty স্ট্রিক 120হয়1

পরীক্ষার কেস:

n      DS
2      1
3      2
4      1
5      2
6      1
7      3
8      1
9      2
10     1
2521   10

আরও পরীক্ষার কেসগুলি এখানে পাওয়া যাবে

নোট

বিধি

  • আপনি ধরে নিতে পারেন ইনপুটটি 1 এর চেয়ে বেশি।

স্কোরিং

: নিম্নতম স্কোরের সাথে জমা দেওয়া submission


আমি "ক্ষুদ্রতম ধনাত্মক পূর্ণসংখ্যার" "ক্ষুদ্রতম nonnegative পূর্ণসংখ্যার" পরিবর্তন করার পরামর্শ দিই। এটি মোটেও চ্যালেঞ্জকে পরিবর্তন করে না, তবে বর্তমান বর্ণনার সাথে বোঝা যাচ্ছে যে আমাদের 1 দ্বারা বিভাজ্যতা পরীক্ষা করার দরকার নেই (যা আমাদের প্রযুক্তিগতভাবে দরকার নেই)। হয়, বা আপনি বর্ণনা থেকে 1 টি চেক দ্বারা বিভাজ্যতা সরাতে পারেন।
তেহপার্স

ক্ষুদ্রতম ধনাত্মক পূর্ণসংখ্যা 1 হয় এবং k + 1এটি 2 হয় যেখানে kসবচেয়ে ছোট ধনাত্মক পূর্ণসংখ্যা হয়। নিটপিকের জন্য দুঃখিত
তেহপায়ার্স

এটি কি ক্ষুদ্রতম kযা ভাগ হয় না তা খুঁজে পাওয়ার মতো নয় n-1?
পাওলো ইবারম্যান

@ PaŭloEbermann n=7যেখানে নিন k=3: n-1দ্বারা বিভাজ্য k
অলিভার

আহ, আমি মিস +1
পাওলো ইবারম্যান

উত্তর:



17

জাভা 8, 44 42 41 39 বাইট

ক্রস করা হয়েছে 44 এখনও নিয়মিত 44; (

n->{int r=0;for(;~-n%--r<1;);return~r;}

-২ বাইট @ লিক্যুনকে ধন্যবাদ জানায়
-1 বাইট ধন্যবাদ @ দ্য লেথালকোডারকে ধন্যবাদ ।
-2 ধন্যবাদ বাইট @Nevay

ব্যাখ্যা:

এখানে চেষ্টা করুন।

n->{                 // Method with integer as parameter and return-type
  int r=0;           //  Result-integer (starting at 0)
  for(;~-n%--r<1;);  //  Loop as long as `n-1` is divisible by `r-1`
                     //   (after we've first decreased `r` by 1 every iteration)
  return~r;          //  Return `-r-1` as result integer
}                    // End of method


1
41 বাইট লেকইনুনের পরামর্শ থেকে সবেমাত্র একটি বাইট শেভ করেছেন।
TheLethalCoder









3

কিউবিক্স , 17 বাইট

)uUqI1%?;)qUO(;/@

এটি অনলাইন চেষ্টা করুন!

Cubified

    ) u
    U q
I 1 % ? ; ) q U
O ( ; / @ . . .
    . .
    . .
  • I1 ইনপুট এবং বিভাজক সঙ্গে স্ট্যাক সেটআপ করুন
  • %? মোড এবং পরীক্ষা না
    • ;)qU)uqUযদি 0 ফলাফল এবং ইনক্রিমেন্ট ইনপুট এবং বিভাজক সরান। ফিরে যাওয়ার পথে প্রায় এক রাউন্ডের বিট%
    • /;(O@ 0 না হলে, ড্রপ ফলাফল, হ্রাস বিভাজক, আউটপুট এবং প্রস্থান

এটি চালান দেখুন




2

সুইফট 4 , 56 বাইট

এটি একটি সম্পূর্ণ ফাংশন f, একটি পূর্ণসংখ্যা পরামিতি সহ iআউটপুট প্রিন্ট করে।

func f(i:Int){var k=0;while(i-1)%(k+1)<1{k+=1};print(k)}

এখানে চেষ্টা করুন।

সুইফট 4 , 56 বাইট

এটি একটি বেনামে ফাংশন, ফলাফলটি ফিরিয়ে দেয়।

{var k=0;while($0-1)%(k+1)<1{k+=1};return k}as(Int)->Int

এখানে চেষ্টা করুন।

টেস্ট স্যুটটি পরীক্ষা করে দেখুন!



2

ডিসি , 28 বাইট

1si[1+dli1+dsi%0=M]dsMxli1-p

এটি অনলাইন চেষ্টা করুন!

এটি বৃদ্ধি এবং চূড়ান্ত হ্রাস সহ, সত্যিই suboptimal বোধ করে , কিন্তু আমি সত্যিই এটির উন্নতি করার উপায় দেখতে পাচ্ছি না। মূলত আমরা কেবলমাত্র একটি পাল্টা বৃদ্ধি করি iএবং যতক্ষণ না মান মোড iশূন্য হতে থাকে ততক্ষণ আমাদের প্রারম্ভিক মান হয় এবং এটি একবার সত্য না হলে আমরা একটি থেকে বিয়োগ করে iমুদ্রণ করি।



2

জে, 17 বাইট

[:{.@I.>:@i.|i.+]

এটি অনলাইন চেষ্টা করুন!

আমি মনে করি এখানে এখনও গল্ফ করার জায়গা আছে।

ব্যাখ্যা (অবরুদ্ধ)

[: {.@I. >:@i. | i. + ]
                 i. + ]  Range [n,2n)
                 i.       Range [0,n)
                    +     Added to each
                      ]   n
         >:@i. | i. + ]  Divisibility test
         >:@i.            Range [1,n+1)
               |          Modulo (in J, the arguments are reversed)
                 i. + ]   Range [n,2n)
    {.@I.                Get the index of the first non-divisible
       I.                 Indices of non-zero values
    {.                    Head

ক্যাপটি ( [:) সেখানে রয়েছে তা নিশ্চিত করার জন্য যে জে শেষ ক্রিয়াটি আচরণ করে না ({.@I. হুকের অংশ হিসাবে ) ।

এই উত্তর সম্পর্কে একমাত্র অদ্ভুত জিনিসটি হ'ল I.প্রতিটি নন-শূন্য সংখ্যার সূচকটিকে সেই সংখ্যার মান হিসাবে বহুবার ডুপ্লিকেট করে। যেমন

   I. 0 1 0 2 3
1 3 3 4 4 4

তবে যেহেতু আমরা প্রথম সূচকটি যাই হোক না কেন এটি গুরুত্বপূর্ণ নয় (এবং যেহেতু i.একটি আরোহণের পরিসর দেয়, আমরা জানি প্রথম সূচকটি সবচেয়ে ছোট মান হবে)।

অবশেষে, এখানে একটি খুব সংক্ষিপ্ত প্রমাণ রয়েছে যে এটি কেবলমাত্র বিভাগ চেক করার জন্য বৈধ n

আমরা এর সাথে বিভাজ্যতা যাচাই করা শুরু করি 1 | n, সুতরাং ধরে নিই যে লাইনটি এতদূর এগিয়ে যায়, একবার আমরা আমাদের দ্বারা বিভাজ্যতা যাচাই করে nদেখি n | 2n - 1যা কখনই সত্য হবে না ( 2n - 1 ≡ n - 1 (mod n))। সুতরাং, লাইনটি সেখানেই শেষ হবে।



2

x86 মেশিন কোড, 16 বাইট

49                 dec    ecx        ; decrement argument
31 FF              xor    edi, edi   ; zero counter

                Loop:
47                 inc    edi        ; increment counter
89 C8              mov    eax, ecx   ; copy argument to EAX for division
99                 cdq               ; use 1-byte CDQ with unsigned to zero EDX
F7 FF              idiv   edi        ; EDX:EAX / counter
85 D2              test   edx, edx   ; test remainder
74 F6              jz     Loop       ; keep looping if remainder == 0

4F                 dec    edi        ; decrement counter
97                 xchg   eax, edi   ; move counter into EAX for return
C3                 ret               ;  (use 1-byte XCHG instead of 2-byte MOV)

উপরের ফাংশন, একটি একক প্যারামিটার নেয় nএ, ECXরেজিস্টার। এটি তার বিভাজ্য ধারাটিকে গণনা করে kএবং এটি EAXনিবন্ধকের মাধ্যমে ফেরত দেয় । এটি 32-বিট ফাস্টকল কলিং কনভেনশন অনুসারে কাজ করে , তাই এটি মাইক্রোসফ্ট বা জ্ঞান কম্পাইলার ব্যবহার করে সি কোড থেকে সহজেই কল করা যায়।

যুক্তিটি বেশ সহজ: এটি 1 থেকে শুরু করে কেবল একটি পুনরাবৃত্তি পরীক্ষা করে It's সেখানে চমৎকার 1 বাইট নির্দেশাবলী প্রচুর সহ INC, DEC, CDQ, এবংXCHG । বিভাগের জন্য হার্ড-কোডেড অপারেশনগুলি আমাদের কিছুটা আঘাত করেছে, তবে ভয়ঙ্কর নয়।

এটি অনলাইন চেষ্টা করুন!



1

এসওজিএল ভি0.12 , 8 বাইট

]e.-ē⁴I\

এখানে চেষ্টা করুন!

সম্পূর্ণ ভিন্ন ধরণের চ্যালেঞ্জের জন্য তৈরি এমন ভাষার পক্ষে মন্দ নয়।

ব্যাখ্যা:

]         do .. while top of the stack is truthy
 e          push the variable E contents, by default user input
  .-        subtract the input from it
    ē       push the value of the variable E and then increase the variable
     ⁴      duplicate the item below one in the stack
      I     increase it
       \    test if divides
            if it does divide, then the loop restarts, if not, outputs POP which is `e-input`

1

গণিত, 40 বাইট

Min@Complement[Range@#,Divisors[#-1]-1]&

এটি অনলাইন চেষ্টা করুন! (Mathics)

গাণিতিক পদ্ধতির, n + কে কে + 1 দ্বারা বিভাজ্য এবং কেবল যদি এন -1 কে + 1 দ্বারা বিভাজ্য হয়। এবং n-1 n দ্বারা বিভাজ্য নয়, তাই Range@#যথেষ্ট সংখ্যা।

মূলত আমি ব্যবহার করার ইচ্ছা করি Min@Complement[Range@#,Divisors[#-1]]-1&, তবে এটি কাজ করে।


আমি যখন টিও থেকে জমাটি ব্যবহার করি তখন ক্যাপচা কেন উপস্থিত হয়?
ব্যবহারকারী 202729

1
কারণ আপনি এটি খুব দ্রুত টাইপ করেছেন (অনুলিপি করেছেন এবং কপি করেছেন)। এটি টিআইও সম্পর্কে নয়।
লিকি নুন

1

জুলিয়া 0.6.0 (47 বাইট) (38 বাইট)

n->(i=1;while isinteger(n/i) i+=1;n+=1 end;i-1)

n->(i=1;while n%i<1 i+=1;n+=1end;i-1)

এটি অনলাইন চেষ্টা করুন!

মিস্টার এক্সকোডারকে ধন্যবাদ জানিয়ে 9 টি বাইট কেটেছিল


2
সাধারণত একটি "অনলাইনে এটিকে পরখ করে" লিঙ্কটি আসলে মানুষ পারবেন চেষ্টা যা বলতে চাচ্ছি যে খেলা বোতাম টিপে আউটপুট দেয় হেডার, ফুটার, এবং আর্গুমেন্ট কিছু সমন্বয় সংজ্ঞা দ্বারা কোড।
পিটার টেলর

@ পিটারটেলর একটি নির্ভুল অনুমানের দ্বারা, আমি এটিকে এটির মতো চালানোর চেষ্টা করেছি এবং আমার অবাক হওয়ার বিষয় এটি কার্যকর হয়েছিল। আমি পরীক্ষারযোগ্য সংস্করণ দিয়ে ওপিকে সম্পাদনা করার পরামর্শ দিচ্ছি।
মিঃ এক্সকোডার 14:55

46 বাইট (একটি স্থান অপসারণ):n->(i=1;while isinteger(n/i) i+=1;n+=1end;i-1)
মিস্টার এক্সকোডার

আর একটি খাঁটি অনুমান এটিকে 38 বাইটে নামিয়ে n->(i=1;while n%i<1 i+=1;n+=1end;i-1)
আনার অনুমতি পেয়েছে

@ পিটারটেলর দুঃখিত এটি ভুলে গেছেন!
গয়েসা


1

ব্যাচ, 70 বাইট

@set/an=%1-1,i=0
:l
@set/ai+=1,r=n%%~i
@if %r%==0 goto l
@echo %i%

সকল এই করছে বৃহত্তম খুঁজে পেতে হয় iযেমন যে LCM(1..i)ভাগ n-1



1

অ্যাসেটো , 28 27 বাইট

[;`%
I)@]
iIk2I(D(
rk[(&Xpu

যদি আমাকে প্রস্থান করতে না হয় তবে আমি একটি বাইট সংরক্ষণ করতে পারি।

ব্যাখ্যা:

আমরা তিনটি স্ট্যাক ব্যবহার করি: বাম স্ট্যাকটি একটি পাল্টা ধরে 2 থেকে শুরু করে, ডানদিকে একটি প্রদত্ত নম্বর (বা তার বৃদ্ধি) ধরে থাকে, সেন্টার স্ট্যাকটি মডিউল অপারেশন করার জন্য ব্যবহৃত হয়। আমরা অবশ্যই একটি স্ট্যাকের মধ্যে সবকিছু করতে পারি, তবে এইভাবে আমরা বাইরের স্ট্যাকগুলি "স্টিকি" হিসাবে সেট করতে পারি (যে মানগুলি পপ করা হয় তা সত্যই মুছে ফেলা হয় না) এবং আমাদের অনেকগুলি সদৃশ ক্রিয়াকলাপ সংরক্ষণ করতে পারে। বিস্তারিতভাবে পদ্ধতিটি এখানে:

একটি পূর্ণসংখ্যা পড়ুন, এটিকে বাড়িয়ে তুলুন, বর্তমান স্ট্যাকটিকে স্টিকি করুন এবং এটিকে (এবং আমাদেরকে) বাম দিকে স্ট্যাকের দিকে "সরান":

iI
rk[

বাম দিকে আরও একটি স্ট্যাক যান, একটি আক্ষরিক 2 টিপুন, এই স্ট্যাকটিকে আঠালোও করুন। কোডটিতে এই অবস্থানটি মনে রাখবেন ( @), এবং একটি মান এবং "স্ট্রেস" করুন এবং নিজেদেরকে আবার সেন্টারে স্ট্যাক করুন।

  @]
  k2
   (

এখন আমরা পরীক্ষা করি: শীর্ষ দুটি সংখ্যার মডুলোটি 0 নয়? যদি তা হয় তবে শেষ দিকে ঝাঁপ দিন, না হলে একটি স্ট্যাক ডানদিকে যান, বৃদ্ধি করুন এবং মানটি এবং আমাদের মাঝখানে চাপ দিন। তারপরে বাম স্ট্যাকের কাছে যান, এটিকেও বাড়িয়ে দিন এবং আমরা যে চিহ্নটি রেখেছিলাম তা ফিরে যান।

[;`%
I)
    I(
    &

যখন মডুলোর ফলাফল শূন্য ছিল না, আমরা আইপিটি যে অবস্থানটি সরিয়ে নিয়ে যাচ্ছি তার বিপরীতে আমরা একটি স্ট্যাক বাম দিকে চলে যাই (যেখানে আমাদের পাল্টা থাকে) এটি হ্রাস করুন এবং মানটি মুদ্রণ করুন, তারপরে প্রস্থান করুন।

      D(
     Xpu


1

এফ #, 86 বাইট 84 বাইট

let s n = 
    let rec c n1 d r=if n1%d=0 then c(n1+1)(d+1)(r+1)else r
    c n 1 0

এটি অনলাইন চেষ্টা করুন!

অলিভার থেকে -2 অক্ষর সম্পাদনা করুন


পিপিসিজিতে আপনাকে স্বাগতম! আপনার প্রোগ্রাম স্টিন লাগে? আপনি টিআইও ব্যবহার করতে পারেন , যার একটি অনলাইন এফ # দোভাষী রয়েছে। এছাড়াও, হোয়াইটস্পেসটি কি ভিতরে সরাতে পারে r = if?
অলিভার

1
@ অলিভার আপনাকে ধন্যবাদ, আমি লিঙ্কটি টিআইওতে পরিবর্তন করেছি, সুতরাং এখন আপনি এটি পরীক্ষার পক্ষে যুক্তিটি আসলে পাস করতে পারেন। :)
ভ্লাদিস্লাভ খাপিন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.