is_gaussian_prime (য)?


23

কার্য

এমন একটি ফাংশন লিখুন a,bযা গৌসিয়ান পূর্ণসংখ্যা z = a+ib(জটিল সংখ্যা) উপস্থাপন করে এমন দুটি পূর্ণসংখ্যা গ্রহণ করে । প্রোগ্রামটি অবশ্যই সত্য বা মিথ্যা প্রত্যাবর্তন করবে কিনা তার উপর নির্ভর করেa+ib একটি হল গসিয়ান মৌলিক বা না

সংজ্ঞা:

a + bi গাউসিয়ান প্রধানমন্ত্রী হ'ল এবং কেবল যদি এটি নিম্নলিখিত শর্তগুলির মধ্যে একটি পূরণ করে:

  • aএবং bউভয় ননজারো এবংa^2 + b^2 প্রধান হয়
  • aশূন্য, |b|প্রধান এবং|b| = 3 (mod 4)
  • bশূন্য, |a|প্রধান এবং|a| = 3 (mod 4)

বিস্তারিত

আপনার কেবল একটি ফাংশন লেখা উচিত। যদি আপনার ভাষার কোনও কার্যকারিতা না থাকে তবে আপনি ধরে নিতে পারেন যে পূর্ণসংখ্যা দুটি দুটি ভেরিয়েবলে সঞ্চিত আছে এবং ফলাফলটি মুদ্রণ করতে পারে বা কোনও ফাইলে এটি লিখতে পারে।

বিল্ট-ইন ব্যবহার না হওয়া মতো আপনার ভাষা কার্যাবলী isprimeবা prime_listবা nthprimeবা factor। সর্বনিম্ন সংখ্যা বাইট জিতেছে। প্রোগ্রামটি অবশ্যই a,bকোথায় কাজ করবেa^2+b^2 একটি 32bit (স্বাক্ষরিত) পূর্ণসংখ্যা এবং উল্লেখযোগ্যভাবে 30 চেয়ে বেশি সেকেন্ডের মধ্যে শেষ করা উচিত নয়।

প্রধান তালিকা

বিন্দুগুলি গাউসিয়ান বিমানের প্রধান সংখ্যাগুলি উপস্থাপন করে ( x= আসল, y= কল্পিত অক্ষ):

এখানে চিত্র বর্ণনা লিখুন

কিছু বড় প্রাইমস:

(9940, 43833)
(4190, 42741)
(9557, 41412)
(1437, 44090)

2
আমাদের কী ফ্যাক্টরিয়েশন ফাংশন ( factorবাশ mfএবং mFসিজেমে, ...) ব্যবহার করার অনুমতি দেওয়া হয়েছে

ওহ না, আমি সেই ফ্যাক্টরিজিং পদ্ধতিগুলি ভুলে গিয়েছি, না দয়া করে নেই =) এবং 32 বিট সীমা একটি ^ 2 + বি ^ 2 এর জন্য প্রযোজ্য, অন্যথায় তা বোঝা যাবে না। আপনার ইনপুট জন্য আপনাকে ধন্যবাদ! আমি প্রশ্ন আপডেট।
flawr

2
আমি পোস্টে গাউসিয়ান প্রাইমগুলির সংজ্ঞা যুক্ত করেছি। আমি কীভাবে এটি করেছি তা যদি আপনি পছন্দ না করেন তবে এটিকে আবার বদ্ধ করতে দ্বিধা বোধ করুন তবে আমি অবশ্যই সংজ্ঞাটি কোথাও অন্তর্ভুক্ত করার পরামর্শ দেব।
আন্ডারগ্রাউন্ডোমোনাইল

সুন্দর কথা, আমি মূলত লোকেরা সৃজনশীল হওয়ার জন্য
কীভাবে আধিপত্যটি

1 1073741857 আমার কাছে গাউসিয়ান প্রাইম বলে মনে হচ্ছে না কারণ 1 ^ 2 + 1073741857 one 2 একটি
সমান

উত্তর:


4

হাস্কেল - 77/108 107 অক্ষর

ব্যবহার: উভয় সমাধানে,% বি টাইপ করলে ফিরে আসবে যে + দ্বি গাউসিয়ান প্রাইম কিনা।

আমি পরিচালিত সর্বনিম্ন, তবে কোনও সৃজনশীলতা বা অভিনয় নেই (77 77 টি)

p n=all(\x->rem n x>0)[2..n-1]
a%0=rem a 4==3&&p(abs a)
0%a=a%0
a%b=p$a^2+b^2

এই সমাধানটি n এর নীচে সমস্ত সংখ্যার মাধ্যমে এটি প্রাইম কিনা তা পরীক্ষা করতে ক্ষমতা দেয়।

অবারিত সংস্করণ:

isprime = all (\x -> rem n x != 0) [2..n-1] -- none of the numbers between 2 and n-1 divide n.
isGaussianPrime a 0 = rem a 4==3 && isprime (abs a)
isGaussianPrime 0 a = isGaussianPrime a 0   -- the definition is symmetric
isGaussianPrime a b = isprime (a^2 + b^2)

পরবর্তী সমাধানটিতে একটি অতিরিক্ত বৈশিষ্ট্য রয়েছে - স্মৃতিচারণ। একবার আপনি যদি পরীক্ষা করে দেখেন যে কোনও পূর্ণসংখ্যা এন প্রাইম হয় কিনা, আপনার কম্পিউটারে সঞ্চিত হবে বলে এন এর চেয়ে কম বা সমান সমস্ত সংখ্যার "প্রাইমিনিস" পুনরায় গণনা করার প্রয়োজন হবে না।

(107 অক্ষর। মন্তব্যগুলি স্পষ্টতার জন্য)

s(p:x)=p:s[n|n<-x,rem n p>0] --the sieve function
l=s[2..]                     --infinite list of primes
p n=n==filter(>=n)l!!0       --check whether n is in the list of primes
a%0=rem a 4==3&&p(abs a)
0%a=a%0
a%b=p$a*a+b*b

অবারিত সংস্করণ:

primes = sieve [2..] where
    sieve (p:xs) = p:filter (\n -> rem n p /= 0) xs
isprime n = n == head (filter (>=n) primes) -- checks if the first prime >= n is equal to n. if it is, n is prime.
isGaussianPrime a 0 = rem a 4==3 && isprime (abs a)
isGaussianPrime 0 a = isGaussianPrime a 0   -- the definition is symmetric
isGaussianPrime a b = isprime (a^2 + b^2)

এটি সমস্ত প্রাইমগুলির একটি অসীম তালিকা গণনার জন্য ইরোটোস্টিনিসের চালনী ব্যবহার করে (কোডের তালিকার জন্য l বলা হয়)। (অসীম তালিকাগুলি হ্যাশেল একটি সুপরিচিত কৌশল)।

অসীম তালিকা থাকা কীভাবে সম্ভব? প্রোগ্রামের শুরুতে, তালিকাটি মূল্যহীন হয় এবং তালিকার উপাদানগুলি সংরক্ষণের পরিবর্তে কম্পিউটারগুলি সেগুলি গণনা করার উপায় সঞ্চয় করে। প্রোগ্রামটি তালিকায় প্রবেশ করার সাথে সাথে এটি আংশিকভাবে অনুরোধ পর্যন্ত নিজেকে মূল্যায়ন করে। সুতরাং, যদি প্রোগ্রামটি তালিকার চতুর্থ আইটেমটির জন্য অনুরোধ জানায়, কম্পিউটার সমস্ত প্রাইমগুলি ইতিমধ্যে মূল্যায়ন না করা সমস্তগুলি গণনা করবে, সেগুলি সংরক্ষণ করবে এবং বাকী অবমূল্যায়িত থাকবে, একবার তাদের গণনার উপায় হিসাবে সংরক্ষণ করা হবে প্রয়োজন ছিল।

মনে রাখবেন যে এগুলি সবই হাস্কেল ভাষার অলস প্রকৃতির দ্বারা অবাধে দেওয়া হয়েছে, এর কোনওটিই কোড থেকে প্রকাশিত নয়।

প্রোগ্রামের উভয় সংস্করণই ওভারলোড হয়েছে, যাতে তারা নির্বিচারে আকারের ডেটা পরিচালনা করতে পারে।


আমার গণনা অনুসারে, আপনার প্রথম সমাধানটি আসলে 77 টি অক্ষর: ডি
মারাত্মক

আমি নিউলাইন গণনা করেছি, আমি না?
গর্বিত হাসেলেলার ই

আমি 74 নিয়মিত অক্ষর এবং 3 টি নতুন লাইন গণনা করি

আপনি ঠিক বলেছেন, মনে হচ্ছে যে কোনও কারণে নোটপ্যাড ++ নতুনলাইনগুলির আগে অক্ষর যুক্ত করেছে। ধন্যবাদ!
গর্বিত হাসেলেলার

এজন্য আমি উত্সাহ ব্যবহার করি;) সাহায্য করে খুশি!
মারাত্মক

9

সি, 149 118 টি অক্ষর

সম্পাদিত সংস্করণ (১১৮ টি অক্ষর):

int G(int a,int b){a=abs(a);b=abs(b);int n=a*b?a*a+b*b:a+b,
d=2;for(;n/d/d&&n%d;d++);return n/d/d|n<2?0:(a+b&3)>2|a*b;}

এটি একটি একক ফাংশন:

  • জি ( একটি , ) আয় অশূন্য (সত্য) হলে একটি + + দ্বি একটি গসিয়ান প্রাইম বা শূন্য (মিথ্যা) অন্যথায় নয়।

এটি পূর্ণসংখ্যার প্রাথমিকতা পরীক্ষাকে ভাঁজ করে n/d/d|n<2ফেরতের মান গণনার মধ্যে লুকানো অভিব্যক্তিতে পরিণত করে । এই গল্ফযুক্ত কোড অপারেটর অগ্রাধিকার এবং পূর্ণসংখ্যা বিভাগ জড়িত (অন্য কথায় ) এবং অন্যান্য কৌশলগুলির a*bবিকল্প হিসাবেও ব্যবহার করে । উদাহরণস্বরূপ বলছে এর খাটো উপায় , যা বলার অপেক্ষা রাখে না একটি ওভারফ্লো-নিরাপদ উপায় বা বা সারাংশ মধ্যে ।a&&ba!=0 && b!=0n/d/dn/d/d>=1n>=d*dd*d<=nd<=sqrt(n)


আসল সংস্করণ (১৪৯ টি অক্ষর):

int Q(int n){int d=2;for(;n/d/d&&n%d;d++);return n/d/d||n<2;}
int G(int a,int b){a=abs(a);b=abs(b);return!((a|b%4<3|Q(b))*(b|a%4<3|Q(a))*Q(a*a+b*b));}

কার্যাবলী:

  • প্রশ্ন ( এন ) এন প্রাথমিক হয় যদি 0 (মিথ্যা) দেয় , অথবা এন ননপ্রাইম হলে 1 (সত্য) প্রদান করে। এটি জি ( , ) এর জন্য সহায়ক সহায়ক।

  • জি ( একটি , ) আয় 1 (সত্য) হলে একটি + + দ্বি একটি গসিয়ান প্রাইম অথবা 0 (মিথ্যা) অন্যথায় নয়।

এর জন্য নমুনা আউটপুট (200% বাড়িয়ে) |, | | 8 128:

Sample128


2
চিত্রের জন্য +1! আপনি কি প্রথম আকারের
মাত্রায়

আপনি (; n / d / d & & n% d; d ++) এর জন্য d = 2; প্রতিস্থাপন করে বেশ কয়েকটি অক্ষর সংরক্ষণ করতে পারেন; (d = 2; n / d / d && n% d ++;) এর জন্য সহ;
অ্যালকিমিস্ট

@ আলচিমিস্ট - এটি প্রকৃতপক্ষে অক্ষরগুলি সংরক্ষণ করে, তবে ভুল ফলাফল দেয়। d++শর্তের অংশ হিসাবে এটি না হওয়া গুরুত্বপূর্ণ , অন্যথায় এটি নিম্নলিখিত যুক্তিগুলিকে গণ্ডগোল করে। এছাড়াও, লুপটির d=2অভ্যন্তরে সরানো forআসলে চরিত্রের সংখ্যা হ্রাসের পরিবর্তে বৃদ্ধি করে, কারণ dএখনও লুপের intআগে হিসাবে ঘোষণা করা দরকার for। আমি কিছু অনুপস্থিত করছি?
টড লেহম্যান

খুব সত্য। কোডিং পরিবেশ থেকে দূরে এটিকে দেখার পক্ষে বিপদ এবং খুব কাছাকাছি যথেষ্ট নয়। বর্ধনশীলতা যেখানেই রয়েছে সেখানেই থাকতে হবে এবং সূচনাটি কেবলমাত্র আপনার মূল সমাধানটিকে সহায়তা করে। যদি আপনি কোনও নির্দিষ্টকরণ ছাড়াই ফাংশনের বাইরে এন & ডি ঘোষণা করেন এবং লুপের জন্য তাদের সূচনা করেন তবে আমি ধরে নিই যে আপনি ফাংশনটি স্ব-অন্তর্ভুক্ত করছেন যা প্রয়োজনীয়তার একটি কঠোর ব্যাখ্যা রয়েছে।
অ্যালকিমিস্ট

1
এখানে প্রাইম-টেস্টিং লুপটি কিছু দর্শনীয় গল্ফ করছে! তবে | a | এর জন্য একটি ভেরিয়েবল ব্যবহার করে রিটার্নের ধরণ এবং যুক্তিগুলির জন্য int টাইপ স্পেসিফায়ারকে ফেলে রেখে আরও বেশি সঞ্চয় অর্জন সম্ভব However + | খ | এবং রিটার্নের বিবৃতিটি অনুকূলকরণ: G(a,b){int s=abs(a)+abs(b),n=a*b?a*a+b*b:s,d=2;for(;n/d/d&&n%d;d++);return n>1>n/d/d&&s%4/3|a*b;}মাত্র 97 টি অক্ষরে প্রকাশিত হয়েছে।

4

এপিএল (ডায়ালগ ইউনিকোড) , 36 47 48 49 47 43 28 বাইট

দুটি পূর্ণসংখ্যার অ্যারে নেয় a bএবং বিবৃতিটির বুলিয়ান মান প্রদান করেa+bi is a Gaussian integer

সম্পাদনা: +11 বাইট কারণ আমি কোনও গাউসির প্রাইম সংজ্ঞাটি ভুল বুঝেছিলাম। উত্তরটি পুনরায় সংশোধন করা থেকে +1 বাইট। তৃতীয় বাগ ফিক্স থেকে +1 বাইট। ডিএফএন-এর পরিবর্তে ট্রেন ব্যবহার করার কারণে -২ বাইট। -4 বাইট condition: if_true ⋄ if_falseপরিবর্তে গার্ড ব্যবহার করার কারণে এনজিএনকে ধন্যবাদ জানায় if_true⊣⍣condition⊢if_false। -15-বাইট শর্তটি লেখার সম্পূর্ণ ভিন্ন উপায় খুঁজে পাওয়ার কারণে এনএনজিকে ধন্যবাদ - অন্যথায় পুরো ট্রেন হিসাবে।

{2=≢∪⍵∨⍳⍵}|+.×0∘∊⊃|{⍺⍵}3=4||

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

ব্যাখ্যা

{2=≢∪⍵∨⍳⍵}|+.×0∘∊⊃|{⍺⍵}3=4||

                           |   abs(a), abs(b) or abs(list)
                       3=4|    Check if a and b are congruent to 3 (mod 4)
                  |{⍺⍵}        Combine with (abs(a), abs(b))
              0∘∊⊃             Pick out the original abs(list) if both are non-zero
                               Else pick out (if 3 mod 4)
          |+.×                 Dot product with abs(list) returns any of
                               - All zeroes if neither check passed
                               - The zero and the number that IS 3 mod 4
                               - a^2 + b^2
{2=≢∪⍵∨⍳⍵}                     Check if any of the above are prime, and return

3

হাস্কেল - 121 টি অক্ষর (নতুন লাইনের অন্তর্ভুক্ত)

এখানে একটি অপেক্ষাকৃত সরল হাস্কেল সমাধান যা কোনও বাহ্যিক মডিউল ব্যবহার করে না এবং এটি যতটা পেয়েছি ততই গল্ফ করে।

a%1=[]
a%n|n`mod`a<1=a:2%(n`div`a)|1>0=(a+1)%n
0#b=2%d==[d]&&d`mod`4==3where d=abs(b)
a#0=0#a
a#b=2%c==[c]where c=a^2+b^2

হিসাবে অনুরোধ করুন ghci ./gprimes.hsএবং তারপরে আপনি এটি ইন্টারেক্টিভ শেলটিতে ব্যবহার করতে পারেন। দ্রষ্টব্য: negativeণাত্মক সংখ্যাগুলি চিকিত্সা এবং অবশ্যই বন্ধনীতে রাখা উচিত। অর্থাত

*Main>1#1
True
*Main>(-3)#0
True
*Main>2#2
False

3

পাইথন - 121 120 অক্ষর

def p(x,s=2):
 while s*s<=abs(x):yield x%s;s+=1
f=lambda a,b:(all(p(a*a+b*b))if b else f(b,a))if a else(b%4>2)&all(p(b))

p কিনা তা পরীক্ষা করে দেখুন abs(x)2 থেকে সমস্ত সংখ্যার abs(x)**.5(যা হয় sqrt(abs(x))) এর দ্বারা পুনরাবৃত্তি করে প্রাইম । এটি x % sপ্রতিটি জন্য ফলন দ্বারা এটি করে sallতারপর চেক সব কিনা পাওয়া মান নন-জিরো হয় এবং মান উৎপাদিত একবার এটি একটি ভাজক encounters স্টপ x। ইন f, কেলেমাস 'হাস্কেল উত্তর দ্বারা অনুপ্রাণিত হয়ে এর f(b,a)জন্য কেস প্রতিস্থাপন করে ।b==0


@ পিটারটেলর থেকে -1 চর এবং বাগফিক্স


খুশি আমি সাহায্য করতে পারি :)
মারাত্মক

আপনি 2 সংরক্ষণের s<abs(x)**.5সাথে প্রতিস্থাপন করতে পারেন s*s<abs(x)যদিও সত্যই আপনার চেক করা উচিত <=, সুতরাং এটি সম্ভবত বগি।
পিটার টেলর

@ পিটারটেলর বাগটি নির্দেশ করার জন্য আপনাকে ধন্যবাদ ...
এইচটিএল

আমার দোভাষীর সাথে কল করা f(0,15)ফলন TypeError: unsupported operand type(s) for &: 'bool' and 'generator'। :(
ফালকো

f(0,15)False২. ,..6 এবং ৩.৪.১ (ওএস এক্সে) উভয়ই আমার জন্য দেয় । আপনি কোন সংস্করণে আছেন?
এইচটিএল

3

পাইথন 2.7 , 341 301 253 বাইট, গতির জন্য অনুকূলিত

lambda x,y:(x==0and g(y))or(y==0and g(x))or(x*y and p(x*x+y*y))
def p(n,r=[2]):a=lambda n:r+range(r[-1],int(n**.5)+1);r+=[i for i in a(n)if all(i%j for j in a(i))]if n>r[-1]**2else[];return all(n%i for i in r if i*i<n)
g=lambda x:abs(x)%4>2and p(abs(x))

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

#pRimes. need at least one for r[-1]
r=[2]
#list of primes and other to-check-for-primarity numbers 
#(between max(r) and sqrt(n))
a=lambda n:r+list(range(r[-1],int(n**.5)+1))
#is_prime, using a(n)
f=lambda n:all(n%i for i in a(n))
#is_prime, using r
def p(n):
    global r
    #if r is not enough, update r
    if n>r[-1]**2:
        r+=[i for i in a(n) if f(i)]
    return all(n%i for i in r if i*i<n)
#sub-function for testing (0,y) and (x,0)
g=lambda x:abs(x)%4==3 and p(abs(x))
#the testing function
h=lambda x,y:(x==0 and g(y)) or (y==0 and g(x)) or (x and y and p(x*x+y*y))

ধন্যবাদ: 40 + 48 - জো কিংকে পুরো গল্ফ করা


fল্যামডা এছাড়াও uneccesary হয়, সহ listকল। এগুলি ব্যতীত 257 বাইট , আরও কিছু সাদা স্থান অপসারণ। এটি সম্ভবত আর তেমন দক্ষ নয়
জো কিং

(15,0) এখন 257 বাইট সংস্করণে সত্য এবং রান সময়টি 5.5s বৃদ্ধি পেয়েছে, দুঃখিত
আলেক্সি বার্ডিন

2

পার্ল - 110 107 105 অক্ষর

আমি আশা করি আমি সংযুক্ত সংজ্ঞাটি সঠিকভাবে অনুসরণ করেছি ...

sub f{($a,$b)=map abs,@_;$n=$a**(1+!!$b)+$b**(1+!!$a);(grep{$n%$_<1}2..$n)<2&&($a||$b%4>2)&&($b||$a%4>2)}

Ungolfed:

sub f {
  ($a,$b) = map abs, @_;
  $n = $a**(1+!!$b) + $b**(1+!!$a);
  (grep {$n%$_<1} 2..$n)<2 && ($a || $b%4==3) && ($b || $a%4==3)
}

ব্যাখ্যা, কারণ কেউ জিজ্ঞেস করলামঃ আমি আর্গুমেন্ট (পড়া @_) এবং তাদের পরম মান করা $a, $bতাদের নিদর্শন প্রয়োজন হবে না কারণ ফাংশন আছে। মানদণ্ড প্রত্যেকটি একটি সংখ্যা এর primality পরীক্ষা প্রয়োজন, কিন্তু এই সংখ্যা কিনা উপর নির্ভর করে $aবা $bশূন্য, যা আমি সবচেয়ে কম ভাবে প্রকাশ করতে এবং রাখা করার চেষ্টা হয় $n। পরিশেষে আমি পরীক্ষা করে $nদেখি যে 2 টির মধ্যে কতগুলি সংখ্যা গণনা করে নিজেই এটি অবশিষ্ট হিসাবে ছাড়াই ভাগ করা হয় (এটি grep...<2অংশ) এবং তারপরে আরও পরীক্ষা করে দেখুন যে সংখ্যার মধ্যে যদি কোনওটি শূন্য হয় তবে অন্যটি 3 টি মডুলোর 4 সমান হয় রিটার্ন মান হ'ল ডিফল্টরূপে তার শেষ লাইনের মান হয় এবং সমস্ত শর্ত পূরণ করা হলে এই শর্তগুলি কিছু সত্যবাদী মান দেয়।


আমি এটি নেতিবাচক পরামিতিগুলির জন্য কাজ করতে পারি না।
মারাত্মক

1
@killmous আপনি সঠিক শুধু এটি সংশোধন করছি
তাল

আপনি আলগোরিদিম ব্যাখ্যা করতে পারেন?
গর্বিত হাসেলেলার

1
নিস! যাইহোক, আমি মনে করি আপনি $a%4>2পরিবর্তে কিছু লিখে কিছু অক্ষর মুণ্ডন করতে পারেন $a%4==3
টড লেহম্যান

2

গল্ফ্লুয়া 147 141

উপরের গণনাটি নতুন কার্যগুলিকে উপেক্ষা করে যা আমি বিভিন্ন ফাংশনগুলি দেখতে যোগ করেছি। তা না করার জেদ থাকা সত্ত্বেও, আমি মামলাগুলির মধ্যে প্রাইমস সমাধানের জন্য প্রাণপণ চেষ্টা করি।

\p(x)s=2@s*s<=M.a(x)?(x%s==0)~0$s=s+1$~1$
\g(a,b)?a*b!=0~p(a^2+b^2)??a==0~p(b)+M.a(b)%4>2??b==0~p(a)+M.a(a)%4>2!?~0$$
w(g(tn(I.r()),tn(I.r())))

সত্য হলে 1 এবং যদি না হয় তবে 0 প্রদান করে।

একটি অবারিত লুয়া সংস্করণ,

-- prime number checker
function p(x)
   s=2
   while s*s<=math.abs(x) do
      if(x%s==0) then return 0 end
      s=s+1
   end
   return 1
end

-- check gaussian primes
function g(a,b)
   if a*b~=0 then
      return p(a^2+b^2)
   elseif a==0 then
      return p(b) + math.abs(b)%4>2
   elseif b==0 then
      return p(a) + math.abs(a)%4>2
   else
      return 0
   end
end


a=tonumber(io.read())
b=tonumber(io.read())
print(g(a,b))

শেষ পর্যন্ত tonumber(io.read())যুক্তি হিসাবে g
প্লাগ

@ এমনিপ: নিউলাইনগুলি গণনা করা হয়নি, আমি কেবল তাদের স্পষ্টতার জন্য যুক্ত করেছি (পাশের দিকে স্ক্রোলিং নেই)। আমি যখন কিছুটা কাজ করে যাব তখন আমি জি তে পঠন আপডেট করব। ধন্যবাদ!
কাইল কানোজ

আচ্ছা, এটি কি এখনও প্রচুর সংখ্যক সময়ের জন্য যুক্তিসঙ্গত সময়ের মধ্যে কাজ করে? আমি primarly সব গসিয়ান পূর্ণসংখ্যার পরীক্ষণ পথে bruteforcing সম্পর্কে চিন্তা aযেখানে |a| <= |z|যদি a | z(যদি aভাগ z)।
flawr

@ ফ্লোয়ার: আমি এটি একটি = 2147483644, খ = 896234511 দিয়ে পরীক্ষা করেছি এবং প্রায় 0.002 এস-তে 0 পেয়েছি। আমি এটি 2147483629 এবং 2147483587 (দুটি খুব বড় প্রাইম) দিয়েও পরীক্ষা করেছি এবং অন্য 0.002 এস-তে 0 পেয়েছি। আমি একটি বৃহত সংখ্যার সংখ্যার সন্ধান করার চেষ্টা করছি যে ^ 2 + b ^ 2 প্রধান এবং এটি নিশ্চিত করুন যে আমি এত বড় সংখ্যার জন্য একটি কার্যকর সমাধান পেয়েছি।
কাইল কানোজ

@ ফ্লোয়ার: একটি = 4600 ও বি = 5603 (একটি ^ 2 + বি ^ 2 = 2147393609 প্রাইম এবং <2 ^ 32-1) এর সাথে পরীক্ষিত এবং এটি ফিরে আসতে একই 0.002 সেকেন্ড সময় নিয়েছিল 1. হ্যাঁ!
কাইল কানোজ

1

এপিএল (এনএআরএস), 99 টি চর, 198 বাইট

r←p w;i;k
r←0⋄→0×⍳w<2⋄i←2⋄k←√w⋄→3
→0×⍳0=i∣w⋄i+←1
→2×⍳i≤k
r←1

f←{v←√k←+/2*⍨⍺⍵⋄0=⍺×⍵:(p v)∧3=4∣v⋄p k}

পরীক্ষা:

  0 f 13
0
  0 f 9
0
  2 f 3
1
  3 f 4
0
  0 f 7
1
  0 f 9
0
  4600 f 5603
1  

1

রুনিক এনেক্যান্টমেন্টস , 41 বাইট

>ii:0)?\S:0)?\:*S:*+'PA@
3%4A|'S/;$=?4/?3

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

আমি যা ভাবি তার থেকে অনেক সহজ হয়ে শেষ হয়েছিল এবং গল্ফফিকেশনের খুব বেশি জায়গা ছিল না। আমি যে মূল প্রোগ্রামটি অবরুদ্ধ করেছি তা হ'ল:

>ii:0)?\S:0)?\:*S:*+'PA@
3%4A|'S/!   S/;$=

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


1

গণিত, 149 অক্ষর

If[a==0,#[[3]]&&Mod[Abs@b,4]==3,If[b==0,#[[2]]&&Mod[Abs@a,4]==3,#[[1]]]]&[(q=#;Total[Boole@IntegerQ[q/#]&/@Range@q]<3&&q!=0)&/@{a^2+b^2,Abs@a,Abs@b}]

কোডটি গণিতের কোনও মানক মৌলিক সংখ্যা বৈশিষ্ট্য ব্যবহার করে না, পরিবর্তে এটি তালিকায় পূর্ণসংখ্যার সংখ্যা গণনা করে {n / 1, n / 2, ..., n / n}; যদি সংখ্যাটি 1 বা 2 হয় তবে n হ'ল প্রধান। ফাংশনটির একটি বিস্তৃত রূপ:

MyIsPrime[p_] := (q = Abs@p; 
  Total[Boole@IntegerQ[q/#] & /@ Range@q] < 3 && q != 0)

-20 থেকে 20 পর্যন্ত সমস্ত গাউসিয়ান পুরস্কারের বোনাস প্লট:

গাউসি প্রাইমদের প্লট



0

পাইথন - 117 122 121

def f(a,b):
 v=(a**2+b**2,a+b)[a*b==0]
 for i in range(2,abs(v)):
  if v%i<1:a=b=0
 return abs((a,b)[a==0])%4==3or a*b!=0

যেহেতু 3 হ'ল বৃহত্তম সংখ্যাটি মোড 4 হতে পারে, আপনি এটির ==3সাথে প্রতিস্থাপন করতে পারেন>2
FlipTack
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.