গল্ফ সিউডোপ্রাইমস!


9

ভূমিকা / পটভূমি

একটি সাম্প্রতিক আলোচনা মধ্যে ক্রিপ্টো চ্যাট আমি আলোচনা করতে সঙ্গে / সহায়তা সন্মুখীন হয়েছিল ফার্মার primality পরীক্ষা এবং কারমাইকেল নম্বর। এই পরীক্ষাটি সেই ভিত্তির উপর ভিত্তি করে তৈরি হয় যা a^(p-1) mod p==1সর্বদা প্রাইমদের জন্য ধারণ করে pতবে সর্বদা কমপোজাইটের জন্য নয়। এখন একটি কারমাইকেল নম্বর হ'ল মূলত ফেরমাটের পরীক্ষা সবচেয়ে খারাপ শত্রু: এমন একটি সংখ্যা যার জন্য আপনাকে সহ-প্রধান না হওয়ার জন্য বেছে নিতে হবে । এখন যদি সহ-প্রধান না হয় তবে আপনি মূলত একটি অ-তুচ্ছ কারণের সন্ধান করেছেনapa^(p-1) mod p!=1apএবং যেমনটি আমরা সবাই জানি ফ্যাক্টরিং বেশ শক্ত হতে পারে। বিশেষত যদি সমস্ত কারণ যথেষ্ট পরিমাণে বড় হয়। আপনি এখন বুঝতে পারবেন কেন ফার্মাট পরীক্ষাটি অনুশীলন হিসাবে প্রায়শই ব্যবহার করা হয় না (ভাল আরও ভাল অ্যালগরিদম রয়েছে) কারণ এটি এমন একটি সংখ্যা রয়েছে যার জন্য আপনাকে ডিফেন্ডার হিসাবে (সুরক্ষার শর্তে) একই পরিমাণ কাজ করতে হবে আক্রমণকারী (নাম্বারটি ফ্যাক্টর)।

সুতরাং এখন যেহেতু আমরা জানি যে এই সংখ্যাগুলি কিছুটা আকর্ষণীয় কেন , আমরা এগুলি সম্ভব সংক্ষিপ্ত উপায়ে জেনারেট করব, সুতরাং আমাদের যদি কখনও প্রয়োজন হয় তবে আমরা কেবল জেনারেটিং কোডটি মুখস্ত করতে পারি!

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

সবিস্তার বিবরণী

ইনপুট

এটি একটি মান চ্যালেঞ্জ, যাতে আপনি একটি ইতিবাচক বা অ-নেতিবাচক পূর্ণসংখ্যাকে nইনপুট হিসাবে গ্রহণ করেন। nআপনার পছন্দ হিসাবে 0- বা 1-ইনডেক্সড হতে পারে (দয়া করে নির্দেশ করুন)।

আউটপুট

আপনার আউটপুটটি হয় হয় nতৃতীয় nকারমাইকেল নম্বর বা প্রথম কারমাইকেল নম্বর হবে, যেমন আপনি পছন্দ করেন (দয়া করে নির্দেশ করুন)।

সবিস্তার বিবরণী

একটি পূর্ণসংখ্যা xহ'ল একটি কারমাইকেল নম্বর যদি এবং শুধুমাত্র যদি xসংমিশ্রিত হয় এবং সমস্ত সংখ্যার yসাথে gcd(x,y)=1থাকে তবে এটি এটি ধারণ করে y^(x-1) mod x==1

কে জিতলো?

এই , তাই বাইটে সবচেয়ে সংক্ষিপ্ত কোড!
স্ট্যান্ডার্ড আইও এবং লুফোলের বিধিগুলি প্রযোজ্য।

পরীক্ষার কেস

প্রথম কয়েকটি কারমাইকেল নম্বরগুলি হ'ল:

 561,1105,1729,2465,2821,6601,8911,10585,15841,
 29341,41041,46657,52633,62745,63973,75361,101101,
 115921,126217,162401,172081,188461,252601,278545,
 294409,314821,334153,340561,399001,410041,449065,
 488881,512461

উত্তর:


8

গণিত, 71 বাইট

(t=s=1;While[t<=#,If[++s~Mod~CarmichaelLambda@s==1&&!PrimeQ@s,t++]];s)&  

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

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


4
ম্যাথমেটিকা ​​এখন টিআইও-তে রয়েছে, তাই যদি কেউ আগ্রহী হন তবে অনলাইনে চেষ্টা করে
মিঃ এক্সকডার

@ মিঃ এক্সকোডার হেই! দুর্দান্ত! আমি (আমার প্রথম) গণিত টিআইও যোগ করেছি
J42161217

6

পাইথন 2 , 92 বাইট

f=lambda j,n=1:j and f(j-([(k/n)**~-n%n for k in range(n*n)if k/n*k%n==1]<[1]*~-n),n+1)or~-n

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

1-সূচিযুক্ত এবং গুড় হিসাবে ধীর।

তালিকার উপলব্ধিতে আমি ডেনিসের পদ্ধতিটি সমস্ত সংখ্যারn (এন এর টোটটিভেটিভ ) কপিরাইট তৈরিরx**~-n%n জন্য ব্যবহার করি এবং তারপরে আমি তাদের সকলের জন্য গণনা করি। এই তালিকা কল করুন L

কারমাইকেল নম্বর সনাক্ত করতে, আমি এই তালিকাটিকে অভিধানের সাথে তালিকার সাথে থাকা একটি তালিকার সাথে তুলনা করি n-1। কেন এই কাজ করে?

প্রতিটি উপাদান Lএকটি ধনাত্মক পূর্ণসংখ্যার: (k/n)কপিরাইট হয় n, ঠিক (k/n)**~-nতেমন হয় (k/n)**~-n%n > 0। সুতরাং, এর একমাত্র সম্ভাব্য মানগুলি Lঅভিধানের তুলনায় কম থাকে [1]*(n-1) যা পুরোপুরি এর চেয়ে কম থাকে n-1 । ( Lধারণ করতে পারে না আরো তুলনায় n-1মান হিসাবে, nচেয়ে বেশি থাকতে পারে না n-1totatives! তুলনা তাই ভালো [1,1,1,1,3] < [1,1,1,1]হয়ে গেছে।)

যৌথ যে নিশ্চিত করে তাতে কম n-1এন্ট্রি কম রয়েছে তা পরীক্ষা করা হচ্ছে। ( ট্যাটিভেটিভস থাকা আদিমতার সমতুল্য শর্ত)) এবং তারপরে, কারমাইকেল সংখ্যা হওয়ার শর্ত হ'ল প্রতিটি উপাদান সমান । সুতরাং এই অভিধান সংক্রান্ত তুলনা ঠিক আমাদের আগ্রহী তা সনাক্ত করে ।Lnn-1L1L

মিঃ এক্সকোডার পুনরাবৃত্ত ল্যাম্বদা ফর্মটিতে স্যুইচ করে একটি বাইট সংরক্ষণ করেছিলেন: jপ্রতিবার আমরা কারমাইকেল সংখ্যায় হিট করেছি এবং যতবার আমরা পুনরাবৃত্তি করি তার প্রত্যেকটি nগণনা করি। সুতরাং একবার jশূন্য হিট, 'তম কারমাইকেল সংখ্যা n-1সমান original_value_of_j


5

জেলি ,  12  11 বাইট

মাইল এবং মিঃ এক্সকোডারকে -1 বাইট ধন্যবাদ (কারমাইকেল ফাংশন পরমাণুর ব্যবহার এবং এর একটি গল্ফ)

%Æc’=ÆP
⁹Ç#

nপ্রথম nকারমাইকেল সংখ্যার একটি তালিকা নেওয়া এবং ফিরে পাওয়া একটি মোনাডিক লিঙ্ক ।

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

কিভাবে?

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

%Æc’⁼ÆP - isCarmichael: number, n (any integer)
 Æc     - Carmicael function of n
%       - n modulo that
   ’    - decremented (0 for Carmichael numbers and primes)
     ÆP - is n prime? (1 for primes 0 otherwise)
    ⁼   - equal?

⁹Ç# - Main link: number, n
  # - count up finding the first n values satisfying:
 Ç  - ...condition: call the last link as a monad
⁹   - ...starting with a value of: literal 256

পূর্ববর্তী 12 বাইট :

Ṗ*%⁼Ṗ_ÆP
⁹Ç#

এটি অনলাইন চেষ্টা করুন! (হ্যাঁ, এটি সময়ের বাইরে n=3)।

কিভাবে?

একটি সংখ্যা,, cএটি একটি কারমাইকেল সংখ্যা যদি এটি সংমিশ্রিত হয় এবং এটি সত্য যে কোনও সংখ্যক x, বড় cহওয়া মডুলোর সাথে xএকত্রে হয় c

আমাদের কেবল এটি ইতিবাচক xহওয়ার জন্য পরীক্ষা করা দরকার x=c

লক্ষণীয় যে x=cচেক কিনা তা ব্যবহারকারীকে xঘাতে উত্থাপিত এর xসর্বসম হয় xমডিউল x, যা সত্য - তাই আমরা এই দেখতে (খাটো কোড এই তোলে) প্রয়োজন হবে না।

Ṗ*%⁼Ṗ_ÆP - Link 1, isCarmichaelNumber: integer c (greater than 1)
Ṗ        - pop c (uses the implicit range(c)) = [1, 2, 3, ..., c-1]
 *       - raise to the power of c (vectorises) = [1^c, 2^c, 3^c, ..., (c-1)^c]
  %      - modulo by c (vectorises) = [1^c%c, 2^c%c, 3^c%c, ..., (c-1)^c%c]
    Ṗ    - pop c = [1, 2, 3, ..., c-1]
   ⁼     - equal? (non-vectorising) = 1 if so, 0 if not
      ÆP - isPrime?(c) = 1 if so, 0 if not
     _   - subtract = 1 if Carmichael 0 if not
         -     (Note the caveat that c must be an integer greater than 1, this is because
         -      popping 1 yields [] thus the equality check will hold; same for 0,-1,...)

⁹Ç# - Main link: number, n
  # - count up finding the first n values satisfying:
 Ç  - ...condition: call the last link as a monad
⁹   - ...starting with a value of: literal 256

এছাড়াও 12 বাইট কিন্তু কারমাইকেল পরমাণু ব্যবহার করে এক মিনিটের মধ্যে প্রথম 33 টি গণনা করে।
মাইল 2

অন্তর্নির্মিত কারমাইকেল ফাংশনটি ব্যবহার করে 11 বাইট
মিঃ এক্সকোডার

@ মিঃ এক্সকোডার আমি মাইলগুলি আলাদাভাবে পোস্ট করার পরামর্শ দিতে যাচ্ছি, তারপরে আপনার নিজের মন্তব্যটি দেখে মুছে ফেললাম। ডিভি হতে পারে কারণ কেউ মনে করে এটি মাইলের সাথে খুব মিল রয়েছে 'এটির চেয়ে একটি মন্তব্য করেছে, তবে আমি মনে করি এটিও একটি অদ্ভুত কারণ যেহেতু ভাবার কোনও কারণ নেই যে আপনি স্বাধীনভাবে একই জিনিসটি খুঁজে পান নি (আমি জানি আমি') এই জাতীয় জিনিসটি বহুবার করেছেন)। আপনি চাইলে আমি আপনার 11 টি পোস্ট করব, তবে আপনার বা মাইলগুলি কিছুটা ক্রেডিট নেওয়া উচিত the
জোনাথন অ্যালান

@ মাইলসও ... ^
জোনাথন অ্যালান

@ জোনাথান অ্যালান কেবল এটি পোস্ট করুন। মাইল 'এবং আমার অবদানের কথা উল্লেখ করুন, এবং আমি
মাইলগুলি

2

ECMAScript Regex, 86 89 বাইট

সতর্কতা: আপনি যদি কিছু অ্যানারি রেজেক্স যাদু আপনার জন্য নষ্ট না করতে চান তবে এটি পড়বেন না। আপনি যদি এই যাদুটি নিজেই নির্ধারণ করতে শট নিতে চান তবে আমি ECMAScript রেজেক্সে কিছু সমস্যা সমাধানের মাধ্যমে প্রারম্ভিকভাবে সুপারিশ করব: একের পর এক সমাধান করার জন্য পরের বার স্পয়লার-ট্যাগযুক্ত প্রস্তাবিত সমস্যার তালিকার জন্য এই আগের পোস্টটি দেখুন

^(?!(x(x+))(?!\2*$)\1*(?=\1$)(?!(xx+)\3+$))((?=(xx+?)\5*$)(?=(x+)(\6+$))\7(?!\5*$)){2,}x$

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

# Match Carmichael numbers in the domain ^x*$ using Korselt's criterion
# N = input number (initial value of tail)
^
(?!
    # Iterate through factors \1, with \2 = \1-1, for which \2 does not divide into N-1
    (x(x+))
    (?!\2*$)           # Assert N-1 is not divisible by \2
    \1*(?=\1$)         # Assert N is divisible by \1; tail = \1
    # If the factor \1, which already passed the aboved tests, is prime, then fail the
    # outside negative lookahead, because N is not a Carmichael number.
    (?!(xx+)\3+$)
)
# Assert that N has at least 2 unique prime factors, and that all of its prime factors
# are of exactly single multiplicity (i.e. that N is square-free).
(
    (?=(xx+?)\5*$)     # \5 = smallest prime factor of tail
    (?=(x+)(\6+$))     # \6 = tail / \5 (implicitly); \7 = tool to make tail = \6
    \7                 # tail = \6
    (?!\5*$)           # Assert that tail is no longer divisible by \5, i.e. that that
                       # prime factor was of exactly single multiplicity.
){2,}
x$

এই রেজেক্সের প্রধান যাদুটি সেই অংশে রয়েছে যে দৃ as়ভাবে দাবি করে যে এন এর সমস্ত মৌলিক উপাদান হুবহু একক সংখ্যাবৃদ্ধির। এটি একই কৌশলটি আমার ম্যাচের স্ট্রিংগুলির দ্বারা ব্যবহৃত যেমনটির দৈর্ঘ্য একটি চতুর্থ শক্তি এবং স্মুথেষ্ট সংখ্যাটি রেজিক্সগুলি সন্ধান করুন: ক্ষুদ্রতম মৌলিক ফ্যাক্টরের দ্বারা পুনরাবৃত্তি অন্তর্ভুক্ত বিভাগ।

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

এই সমস্যাটিতে সেই অ্যালগরিদম ব্যবহার করা তবে কোনও সুবিধা দেয় না। এটির ধীরে ধীরে রিজেক্সের ফলস্বরূপ, বড় আকারের 97 বাইট। প্রাইম গুণিত্ব পরীক্ষা না করে (যা একটি লুপে উভয়ই দৃts়ভাবে জানায় যে সেখানে কমপক্ষে ২ টি প্রধান উপাদান রয়েছে এবং তারা প্রতিটি একক গুণক), আমাদের আলাদাভাবে দাবি করতে হবে যে এন যৌগিক।

^(?!(x(x+))(?!\2*$)\1*(?=\1$)(?!(xx+)\3+$)|((xx+)\5*(?=\5$))?(x(x*))(?=(\6*)\7+$)\6*$\8)(xx+)\9+$

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


 ^
 (?!
     # Iterate through factors \1, with \2 = \1-1, for which \2 does not divide into N-1
     (x(x+))
     (?!\2*$)           # Assert N-1 is not divisible by \2
     \1*(?=\1$)         # Assert N is divisible by \1; tail = \1
     # If the factor \1, which already passed the aboved tests, is prime, then fail the
     # outside negative lookahead, because N is not a Carmichael number.
     (?!(xx+)\3+$)
 |
 # Assert that N is square-free, i.e. has no divisor >1 that is a perfect square.
     ((xx+)\5*(?=\5$))?  # cycle tail through all of the divisors of N, including N itself
     # Match iff tail is a perfect square
     (x(x*))             # \6 = potential square root; \7 = \6 - 1
     (?=
         (\6*)\7+$       # iff \6 * \6 == our number, then the first match here must result in \8 == 0
     )
     \6*$\8              # test for divisibility by \6 and for \8 == 0 simultaneously
 )
 (xx+)\9+$               # Assert that N is composite
 


2
(কড়া কথায় বলতে গেলে এটি একটি decision-problemউত্তর, তবে চ্যালেঞ্জই একটি sequenceচ্যালেঞ্জ)) সম্ভবত আরও শক্তিশালী রেজেক্স বৈকল্পিকের ক্ষেত্রে স্কোয়ার বিভাজনকারীদের জন্য আরও একটি সরাসরি পরীক্ষা পাওয়া যাবে?
নীল

@ নীল আপনি ঠিক বলেছেন, আমি স্কয়ার বিভাজকের জন্য সরাসরি পরীক্ষা করে এটি গল্ফ করতে পারি। ইসিএমএ-তে কোনও অতিরিক্ত বৈশিষ্ট্যের প্রয়োজন নেই। তবে এটি এটি আরও ধীর করে দেবে (এবং আমি এটি কোনও স্পয়লার ট্যাগের আওতায়ও আড়াল করতে চাই)। আমি উভয় সংস্করণ অন্তর্ভুক্ত করতে চাই, আমি মনে করি।
ডেডকোড

হ্যাঁ, আমি ইতিমধ্যে লিখেছি রেইজেক্সদের জন্য প্রশ্নগুলি খুব বিরক্তিকর, এটি সঠিক ধরণের চ্যালেঞ্জ নয়। আমার উত্তর মুছে ফেলা উচিত?
ডেডকোড

@ নীল আপনি এখানে যান আমি আপনার ধারণাটি ব্যবহার করে অ্যালগরিদম প্রয়োগ করেছি। এ কারণেই আমি নিজে থেকে এটি অনুসরণ করার চিন্তা করি নি; এটি প্রকৃতপক্ষে লম্বা রেইগেক্সের ফলস্বরূপ, কারণ একটি-সমন্বিত পরীক্ষার প্রয়োজন।
ডেডকোড

(সাইটের নিয়মের অধীনে আপনার উত্তরটি মুছে ফেলা উচিত, হ্যাঁ)) আমার ধারণাটি ছিল যে রেটিনা রেজেক্সেসের অতিরিক্ত বৈশিষ্ট্যগুলি ব্যবহার করে আপনি এটি গল্ফ করতে পারেন ^(?!(x(x+))(?!\2*$)\1*(?=\1$)(?!(xx+)\3+$)|((^x|xx\5){2,})\4*$)(xx+)\6+$, বা 72২ বাইটেরও কম হতে পারে।
নীল


1

রেটিনা , 94 বাইট

\d*$
x
"$+"}/^(?!(x(x+))(?!\2*$)\1*(?=\1$)(?!(xx+)\3+$)|((^x|xx\5){2,})\4*$)(xx+)\6+$/^+`$
x
x

এটি অনলাইন চেষ্টা করুন! 1-ইন্ডেক্স। দ্রুত নয়, তাই n>5টিআইও-তে সময় শেষ হবে । ব্যাখ্যা:

\d*$
x

বর্তমান মান বৃদ্ধি করুন। প্রথম পাসে, nএটি আউটপুট বাফার থেকেও মুছে ফেলে (তবে $+এটি এখনও অ্যাক্সেস করতে পারে)।

/^(?!(x(x+))(?!\2*$)\1*(?=\1$)(?!(xx+)\3+$)|((^x|xx\5){2,})\4*$)(xx+)\6+$/

বর্তমান মানটি কারমাইকেল নম্বর কিনা তা পরীক্ষা করুন। এটি @ ডেডকোডের বিকল্প অ্যালগরিদম ব্যবহার করে,। নেট / পার্ল / পিসিআরই রেজেক্স ব্যবহার করে লেখার সময় বর্গ সনাক্তকরণ আরও কম হয়।

^+`

বর্তমান মানটি কারমাইকেল নম্বর না হওয়া পর্যন্ত পুনরাবৃত্তি করুন।

$
x

বর্তমান মান বৃদ্ধি করুন।

"$+"}

প্রাথমিক বৃদ্ধি এবং উপরে লুপ nবার পুনরাবৃত্তি ।

x

ফলাফলকে দশমিক রূপান্তর করুন।


0

হাস্কেল , 95 বাইট

s=filter
c n=s(\x->let l=s((1==).gcd x)f;f=[1..x-1]in l/=f&&all(\y->y^(x-1)`mod`x==1)l)[1..]!!n

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

Degolfed:

-- function to filter out Carmichael numbers
filterFunction x = 
    let coprimes = filter ((1 ==) . gcd x) lesserNumbers
        lesserNumbers = [1 .. x - 1]
    in
        -- the number x is Carmichael if it is not prime
        lesserNumbers /= coprimes && 
            -- and all of its coprimes satisfy the equation
            all (\y -> y ^ (x - 1) `mod` x == 1) coprimes

-- get n'th Carmichael number (zero-based)
c n = filter filterFunction [1..] !! n
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.