এক্সওআর প্রাইমস খুঁজুন


16

ইন এই প্রতিদ্বন্দ্বিতা xnor দ্বারা যাকে জাহির, আমরা XOR গুণ বাস্তবায়ন করতে বলা হয়। এই চ্যালেঞ্জের মধ্যে লক্ষ্যটি হ'ল প্রথম nএক্সওআর প্রাইমস সন্ধান করা। আপনি নিম্নরূপ সংজ্ঞা দ্বারা দেখতে পারেন এক্সওআর প্রাইমগুলি নিয়মিত প্রাইমগুলির সাথে খুব একই রকম:

প্রধান সংখ্যার সংজ্ঞা: 1 এর চেয়ে বেশি একটি ধনাত্মক সংখ্যা যা 1 এবং নিজেই এর গুণফল বাদে দুটি সংখ্যার গুণনের মাধ্যমে গঠিত হতে পারে না।

এক্সওআর প্রাইম এর সংজ্ঞা: ১ এরও বেশি একটি ধনাত্মক সংখ্যা যা ১ এবং এর নিজের এক্সওএর গুণফল বাদে দুটি সংখ্যার এক্সওএর গুণনের মাধ্যমে গঠিত হতে পারে না। নোট করুন যে এক্সওআর প্রাইমগুলি কমপক্ষে A014580 রচনা করেছে

এক্সওর গুণকে বহন না করে বাইনারি দীর্ঘ গুণ হিসাবে সংজ্ঞায়িত করা হয়। Xnor এর চ্যালেঞ্জের মধ্যে আপনি XOR গুণনের আরও তথ্য পেতে পারেন ।

ইনপুট:

একটি পূর্ণসংখ্যা n

আউটপুট:

প্রথম nএক্সওআর প্রাইমস।

এখানে 500 এর নিচে XOR প্রাইম রয়েছে:

2 3 7 11 13 19 25 31 37 41 47 55 59 61 67 73 87 91 97 103 109 115 117 131 137 143 145 157 167 171 185 191 193 203 211 213 229 239 241 247 253 283 285 299 301 313 319 333 351 355 357 361 369 375 379 391 395 397 415 419 425 433 445 451 463 471 477 487 499

7
এফডাব্লুআইডাব্লু হ'ল অনন্য ফ্যাক্টরীকরণ ডোমেনের মূল উপাদান F_2[x]
পিটার টেলর

আহম ঠিক কী চ্যালেঞ্জ? সংক্ষিপ্ততম কোড? দ্রুততম কোড?
ইউমেল

2
@ ইমেল ট্যাগটি কোড-গল্ফ, তাই বাইটের মধ্যে সংক্ষিপ্ততম কোডটি ডিফল্ট।
মেগো

উত্তর:


5

পাইথ, 26 বাইট

.fq2/muxyG*Hhdjed2 0^SZ2ZQ

প্রদর্শন

একটি সংখ্যা একটি এক্সওআর-প্রাইম কিনা তা পরীক্ষা করতে, আমরা এখান থেকে অ্যালগরিদম ব্যবহার করে সেই সংখ্যা পর্যন্ত সম্পূর্ণ গুণন টেবিল তৈরি করি এবং তারপরে সেই সংখ্যাটি কতবার উপস্থিত হয় তা গণনা করি। যদি এটি ঠিক 2 হয় তবে সংখ্যাটি প্রধান।

তারপরে, .fপ্রথম এন প্রাইমগুলি প্রদান করে।


2

গণিত, 100 99 বাইট

এফ2[এক্স]

For[p=i=0,i<#,If[IrreduciblePolynomialQ[++p~IntegerDigits~2~FromDigits~x,Modulus->2],Print@p;i++]]&

2

পরী / জিপি , by৪ বাইট

চার্লসকে ধন্যবাদ 4 বাইট সংরক্ষণ করা ।

এফ2[এক্স]

n->p=0;while(n,if(polisirreducible(Mod(Pol(binary(p++)),2)),print(p);n--))

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

মূলত আমার গাণিতিক উত্তর হিসাবে একই , তবে PARI / GP এর ফাংশনের নামগুলি ছোট।


1
চমৎকার, A014580 এ সংস্করণে একটি উন্নতি । আপনি 4 বাইট বন্ধ শেভ করতে পারেন আপনি যদি এর পরিবর্তে হ্রাস: n->p=0;while(n,if(polisirreducible(Mod(Pol(binary(p++)),2)),print(p);n--))
চার্লস

1

সিলোন, 166 বাইট

অবশ্যই এটি পাইথ অ্যান্ড কোয়ের সাথে প্রতিযোগিতা করতে পারে না ...

{Integer*}p(Integer n)=>loop(2)(1.plus).filter((m)=>{for(i in 2:m-2)for(j in 2:m-2)if(m==[for(k in 0:64)if(j.get(k))i*2^k].fold(0)((y,z)=>y.xor(z)))i}.empty).take(n);

বিন্যাসকৃত:

{Integer*} p(Integer n) =>
        loop(2)(1.plus).filter((m) => {
            for (i in 2 : m-2)
                for (j in 2 : m-2)
                    if (m == [
                            for (k in 0:64)
                                if (j.get(k))
                                    i * 2^k
                        ].fold(0)((y, z) => y.xor(z))) i
        }.empty).take(n);

এটি পূর্ণসংখ্যার অসীম পুনরাবৃত্তিযোগ্য (2 দিয়ে শুরু করে) তৈরি করে, কোনও সংখ্যাটি এক্সওর-প্রাইম কিনা তা পরীক্ষা করে ফিল্টার করে এবং প্রথমটি গ্রহণ করে n উপাদানগুলি গ্রহণ করে।

এই ফিল্টারিংটি 2 থেকে এম -1 (যা এম -2 টি রয়েছে) থেকে সমস্ত উপাদানগুলিতে লুপিং করে এবং জোড়-পণ্যটি দেয় কিনা তা প্রতিটি জোড় পরীক্ষা করে কাজ করে m। যদি এর দ্বারা নির্মিত পুনরাবৃত্তি খালি mহয় তবে এটি একটি এক্সওর-প্রাইম এবং তাই অন্তর্ভুক্ত।

এক্সওর-প্রোডাক্ট নিজেই XOR পণ্য গণনার জন্য আমার উত্তর হিসাবে একই অ্যালগরিদম (এবং প্রায় একই কোড) ব্যবহার করে গণনা করা হয়


1

জুলিয়া, 116 বাইট

f(a,b)=b%2*a$(b>0&&f(2a,b÷2))
n->(A=[i=2];while endof(A)<n i+=1;i∈[f(a,b)for a=2:i-1,b=2:i-1]||push!(A,i)end;A[n])

প্রাথমিক ফাংশনটি হ'ল দ্বিতীয় লাইনের বেনামে ফাংশন। এটি একটি সহায়ক ফাংশনকে কল করে f(যা ঘটনাক্রমে xnor এর চ্যালেঞ্জের জন্য আমার জমা)।

Ungolfed:

function xor_mult(a::Integer, b::Integer)
    return b % 2 * a $ (b > 0 && f(2a, b÷2))
end

function xor_prime(n::Integer)
    # Initialize an array to hold the generated XOR primes as well as
    # an index at which to start the search
    A = [i = 2]

    # Loop while we've generated fewer than n XOR primes
    while endof(A) < n
        # Increment the prime candidate
        i += 1

        # If the number does not appear in the XOR multiplication
        # table of all numbers from 2 to n-1, it's an XOR prime
        i  [xor_mult(a, b) for a in 2:i-1, b in 2:i-1] || push!(A, i)
    end

    # Return the nth XOR prime
    return A[n]
end
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.