+1 প্রাইমস গণনা করা হচ্ছে


25

নির্ধারণ করুন যে প্রাকৃতিক সংখ্যা পি একটি হল +1 টি মৌলিক প্রাকৃতিক সংখ্যা এন যদি পি একটি মৌলিক সংখ্যা এবং স্ট্যান্ডার্ড বাইনারি উপস্থাপনা (অর্থাত, নেতৃস্থানীয় শূণ্যসমূহ ছাড়া) পি যোগ (অর্থাত, prepending, সংযোজন বা ঢোকাতে) দ্বারা প্রাপ্ত করা যাবে একটি একক 1 মান বাইনারি প্রতিনিধিত্বের এন

উদাহরণস্বরূপ, বাইনারি উপস্থাপনা 17 হয় 10001 2 । স্বতন্ত্র স্বাভাবিক সংখ্যার একটি যোগ করে যাবে গঠিত 1 থেকে 10001 2 হয় 110001 2 বা 49 , 101001 2 বা 41 , 100101 2 বা 37 , এবং 100011 2 বা 35

এর মধ্যে 41 এবং 37 টি প্রাথমিক সংখ্যা, সুতরাং 17 টিতে দুটি +1 প্রাইম রয়েছে

কার্য

একটি প্রোগ্রাম বা ফাংশন যা একটি কঠোরভাবে ধনাত্মক পূর্ণসংখ্যা গ্রহণ লিখুন এন ইনপুট এবং কপি করে প্রিন্ট বা আয় স্বতন্ত্র সংখ্যা যেমন +1 টি মৌলিক এর এন

ইনপুট এবং আউটপুটটি অবশ্যই একটি পূর্ণসংখ্যা বা তার দশমিক বা আনরি স্ট্রিং উপস্থাপনা হতে হবে।

স্ট্যান্ডার্ড বিধি প্রযোজ্য।

পরীক্ষার মামলা

Input:  4
Output: 0

Input:  1
Output: 1

Input:  17
Output: 2

Input:  33
Output: 3

Input:  553
Output: 4

Input:  3273
Output: 5

Input:  4145
Output: 6

Input:  4109
Output: 7

Input:  196869
Output: 8

1
শান্ত! আজ রাতে আমার কাছে সময় থাকলে আমি এখনই উত্তর দেব
anOKsquirrel

উত্তর:


5

পাইথ, 20 বাইট

s/LPd{mij\1c.BQ]d2hQ

পরীক্ষা স্যুট

s/LPd{mij\1c.BQ]d2hQ
                        Q = eval(input())
      m           hQ    For insertion position in [0 ... Q]
            .BQ         Convert Q to binary string
           c   ]d       Chop at insertion position
        j\1             Join on '1'
       i         2      Convert to integer
     {                  Deduplicate
 /LPd                   Map each number to the number of times it occurs in its
                        prime factorization, e.g. whether or not it is prime.
s                       Sum and print.

1
হু, "ডুপ্লিকেট" আসলে একটি শব্দ।
lirtosiast

8

জাভাস্ক্রিপ্ট ES6, 141 বাইট 143 147 160

@ নাউককে ধন্যবাদ, 13 বাইট সংরক্ষণ করুন

n=>[...t=n.toString(2)].map((l,i)=>t.slice(0,v=i+1)+1+t.slice(v)).filter((l,i,a)=>a.indexOf(l)==i&&(p=(n,c)=>n%c&&c>n-2||p(n,++c))('0b'+l,2))

আমার টিস্ক্রিপ্ট উত্তরের অনুরূপ পদ্ধতি, প্রাইমগুলি পরীক্ষা করার জন্য RegExp (আপনি আমাকে ঠিক শুনেছেন) ব্যবহার করেন।

Ungolfed

n=>
   [...t = n.toString(2)]                  // To binary
   .map((l,i)=>                            // Make cycles
               t.slice(0, v = i+1)
               + 1
               + t.slice(v)
   ).filter((l,i,a)=>  
                     a.indexOf(l) == i &&  // Remove Duplicates
                     (p=(n,c)=>            // Prime checking
                               n % c &&
                                 c > n - 2 ||
                                 p(n,++c)
                     )('0b'+l,2)
   ).length

আমি মনে করি আপনি এর মতো চেকিং (p=(n,c)=>n%c!=0?c>=n-1?1:p(n,++c):0)('0b'+l,2)!Array(+('0b'+l)+1).join(1).match(/^1?$|^(11+?)\1+$/)
প্রাইমটি

@ নাউউক অসাধারণ যা 13 বাইট সংরক্ষণ করে! :)
ডাউনওয়েট

4

মিনকোলাং 0.11 , 54 52 বাইট

n1(2*d0c`,)(0c1c$%$r2*1c*1c++1g2:d1G)rxSI1-[0g2M+]N.

ব্যাখ্যা

n             Get integer from input (let's call it n)
1(       )    Get the smallest power of 2 (say, k) greater than input (starting with 1)
  2*d         Multiply by 2 and duplicate
     0c`,     Copy n and see if it's greater (while loop breaks on 0)

(0c1c$%                       Copy n, copy k, and divmod (pushes n//k, n%k)
       $r                     Swap top two elements
         2*                   Multiply by 2
           1c*                Copy k and multiply
              1c+             Copy k and add
                 +            Add
                  1g2:        Get k and divide by 2
                      d1G)    Duplicate and put one copy back in its former place

rx            Reverse and dump (dumps n and top of stack is now 0)
S             Remove duplicates
I1-[     ]    Check each element for primality
    0g        Get potential prime from bottom of stack
      2M      1 if prime, 0 otherwise
        +     Add (this is why I didn't dump the left-over 0 earlier)
N.            Output as integer and stop.

আমি সর্বদা অন্য মিনকোলং সংস্করণটি বলতে আগ্রহী।
কনর ও'ব্রায়েন

4

টিস্ক্রিপ্ট , 22 বাইট

x÷¿®x÷E(i¬,1)¤©d¡F(¥)n

টিস্ক্রিপ্ট এপিএলের মতো দেখতে শুরু হচ্ছে ... বিশেষ অক্ষরগুলি দীর্ঘায়িত হয়, সাধারণত পুনরাবৃত্ত ক্রম হয়

অনলাইন দোভাষী তারপরে "ইনপুটগুলি সংখ্যা check" চেক করতে ভুলবেন না

ব্যাখ্যা এবং & অবহেলিত

xT(2)s``m(#P(xT(2)E(i+1,1),2))d()F($P)n

xT(2)      // Take input, convert to binary
s``m(#     // Loop over input

  P(         // Convert to decimal...
     xT(2)     // Input to binary
     E(i+1,1)  // Inset 1 into (above) at current index in loop
  ,2)    

)d()       // Remove duplicates
F($P)      // Filter items that aren't prime
n          // Grab length.

এটি 31 বাইট, যাইহোক, জুবিতুতে জেডিট ব্যবহার করে
গ্লেন ও

1
এটি ইউটিএফ -8 এনকোডিং সহ 31 বাইট, তবে আইএসও -8859-1 সহ 22 বাইট রয়েছে।
ডেনিস

4

জুলিয়া, 55 52 বাইট

n->sum(isprime,∪(2n+(k=2.^(0:endof(bin(n))))-n%k))

k=2.^(0:endof(bin(n)))1 থেকে সর্বোচ্চ পাওয়ার চেয়ে 2 এর কম ক্ষমতা সম্পন্ন একটি অ্যারে তৈরি করে n2n+k-n%kতারপরে সম্ভাব্য সমস্ত "+1 সংখ্যা" নির্ধারণ করতে অ্যারে অপারেশন ব্যবহার করে। (এর সমতুল্য union, যা uniqueএই পরিস্থিতিতে একই কাজ করে ) পুনরাবৃত্তি মানগুলি সরিয়ে দেয়। তারপরে sum(isprime,)তালিকার প্রাইমগুলির সংখ্যা গণনা করে।


4

সিজেম, 26 বাইট

কোনও বিজয়ী নয়, তবে বিদ্যমান সিজেএম উত্তরগুলি বেশ শক্তভাবে পরাজিত করে এবং আমি প্রথমবারের মতো 0.6.5 কমান্ডটি ব্যবহার করতে পেরেছি e\

1ri2b+_,{_)e\_}%_&{2bmp},,

এটি এখানে পরীক্ষা করুন।

ব্যাখ্যা

1       e# Push a 1 (this is the 1 we'll be inserting everywhere).
ri      e# Read input and convert to integer.
2b      e# Convert to base 2.
+       e# Prepend the 1.
_,      e# Duplicate and get the number of bits N.
{       e# Map this block over i from 0 to N-1...
  _)    e#   Create a copy and increment to i+1.
  e\    e#   Swap the bits at positions i and i+1, moving the 1 one step through the array.
  _     e#   Duplicate so we keep this version on the stack.
}%
_&      e# Remove duplicates via set intersection with itself.
{       e# Filter the remaining digit lists based on this block...
  2b    e#   Convert bits back to an integer.
  mp    e#   Test for primality.
},
,       e# Get the length of the remaining list.

একটা জিনিষ টুকুনি যে আমরা এ বিট অদলবদল হয় 0এবং 1প্রথম কপি করার আগে, তাই আমরা মূল অ্যারের হারান 1সামনে prepended। যাইহোক, ইনপুটটি সর্বদা ইতিবাচক হয়, সুতরাং অগ্রণী অঙ্কটি সর্বদা এক হবে। এর অর্থ অন্য একটি প্রিফেন্ড করার পরে, ডিজিটাল তালিকার সর্বদা শুরু হবে [1 1 ...]তাই প্রথম অদলবদলটি কোনও ক্ষেত্রেই কোনও অপ-বিকল্প হবে।



3

জুলিয়া, 110 108 104 87 বাইট

n->sum(i->isprime(parse(Int,i,2)),(b=bin(n);∪([b[[1:i;1;i+1:end]]for i=1:endof(b)])))

এটি একটি নামবিহীন ফাংশন তৈরি করে যা গ্রহণ করে এবং পূর্ণসংখ্যা এবং পূর্ণসংখ্যা প্রদান করে। এটি কল করার জন্য, এটির একটি নাম দিন f=n->...

Ungolfed:

function f(n::Integer)
    # Get the binary representation of n as a string
    b = bin(n)

    # Construct an array consisting of binary strings with
    # a one prepended, appended, and each insertion
    x = [b[[1:i; 1; i+1:end]] for i = 1:endof(b)]

    # Count the number of primes
    c = sum(i -> isprime(parse(Int, i, 2)), unique(x))

    return c
end

গ্লেন ওকে 17 বাইট সংরক্ষণ করা হয়েছে!


binএকটি 1 দিয়ে শুরু করতে হবে, যাতে আপনার আলাদাভাবে হ্যান্ডেল করার প্রয়োজন হয় না "1"b। এবং কখন i=length(b), আপনার b[i+1:end]সমতুল্য হবে "", সুতরাং সেই প্রবেশের প্রয়োজন নেই (কেবলমাত্র b=bin(n)কিছু সময় হ্যান্ডেল করা দরকার )। এবং দুটি কম বাইট sumহিসাবে একই জিনিস করবে count
গ্লেন ও

এছাড়াও, যেহেতু আপনি bযাইহোক দৈর্ঘ্যের উপর একটি ব্যাপ্তি ব্যবহার করতে চলেছেন , পাশাপাশি এটি কিছুটা কৌতুক দিয়েও পেতে পারেন - b=bin(n)[s=1:end]এবং তারপরে for i=sবোঝার জন্য।
গ্লেন ও

প্রথম বিটটি bin1 হওয়া উচিত এবং আপনি এটি পেয়ে যাবেন এই বিষয়টি ব্যবহার করে আপনি আরও একটি বাইট সংরক্ষণ করতে পারেন : n->sum(i->isprime(parse(Int,i,2)),(b=bin(n);unique([b[[1:i;1;i+1:end]]for i=1:endof(b)])))- এটি গণনাটি 90 বাইটে নামিয়ে আনবে।
গ্লেন ও

আসলে,, আরও একটি বাইট অপসৃত করা প্রতিস্থাপন uniqueসঙ্গে union- যদি ইনপুট হিসাবে শুধুমাত্র একটি অ্যারের দেওয়া এটা একই জিনিস করতে হবে। বা আরও ভাল, পরিবর্তে union
গ্লেন ও

@ GlenO আপনি মাস্টার ধন্যবাদ, 先生!
অ্যালেক্স এ।

2

সিজেম, 58 বাইট

L{:TQ\=A+Q\+TWe\-2<s:~2b}q~2b0+:Q,(%{:BLe=!{B+:L}&}%~:mp:+

এটি আমার একদিন সময় নিয়েছে এবং এটি ছিল আমার চতুর্থ পুনরাবৃত্তি।



1

পিএইচপি, 145 বাইট

আমি পঠনযোগ্যতার জন্য একটি নতুন লাইন যুক্ত করেছি:

function($n){for($b=base_convert;++$i<=strlen($s=$b($n,10,2));$r+=!$s[$i]&$k<=$j)
for($j=1;($k=$b(substr_replace($s,1,$i,0),2,10))%++$j;);echo$r;}


1

এপিএল, 55

{+/{2=+/0=⍵|⍨⍳⍵}¨∪⍵{2⊥(⍵↑X),1,⍵↓X←⍺⊤⍨N⍴2}¨-1-⍳N←1+⌊2⍟⍵}

2 বাইট সংক্ষিপ্ত ডায়ালগ-নির্দিষ্ট সংস্করণ:

{+/2=+/¨0=|⍨∘⍳⍨¨∪⍵{2⊥⍵(↑,(1∘,↓))⍺⊤⍨N⍴2}¨-1-⍳N←1+⌊2⍟⍵}

1

মতলব (১২০)

n=input('');a=dec2bin(n);g=arrayfun(@(x)bin2dec(cat(2,a(1:x),49,a(x+1:end))),1:log2(n));nnz(unique(g(find(isprime(g)))))

  • আরও গল্ফ চলছে progress

1

ব্র্যাচল্যাগ , 17 বাইট

{ḃ~c₂{,1}ʰc~ḃṗ}ᶜ¹

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

ইনপুট ভেরিয়েবলের মাধ্যমে ইনপুট এবং আউটপুট ভেরিয়েবলের মাধ্যমে আউটপুট।

{             }ᶜ¹    Count every unique
             ṗ       prime number
           ~ḃ        the binary representation of which is
 ḃ                   the binary representation of the input
  ~c₂                partitioned into two (possibly empty) lists
     {  }ʰ           with the first list
      ,1             having a 1 appended
          c          and the two lists then being concatenated back into one.


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