سؤال

('1' * N) !~ /^1?$|^(11+?)\1+$/

على النت وجدت هذه القطعة من روبي البرمجية التي تعمل من أجل N >= 0 التي تحدد ما إذا كان N هو رئيس الحكومة.من ما أستطيع أن أقول ، يبدو أن اللعب مع regex ولكن ليس لدي أي فكرة كيف يعمل.يمكن أن تقولوا لي كيف يعمل ؟

هل كانت مفيدة؟

المحلول

يمكنك أن تجد شرحا مطولا من هذا القانون هنا:http://www.noulakaz.net/weblog/2007/03/18/a-regular-expression-to-check-for-prime-numbers/

نصائح أخرى

هذا هو على الارجح وليس خارج الموضوع ، ولكن في روبي 1.9, يمكنك القيام بذلك:

 require 'mathn'
 38749711234868463.prime?
 => false
require 'prime'

Prime.prime?(4)
# => false

Prime.prime?(5)
# => true

أو:

require 'prime'

Prime.instance.prime?(4)
# => false

Prime.instance.prime?(5)
# => true

انظر أيضا ما هو أبرع regex كنت قد استخدمت من أي وقت مضى? (نعم, أستطيع أن أؤكد أن هذا regexp كانت مكتوبة اصلا من قبل الوصيفة.حتى أنني سمعت لها شرح كيف يعمل :)

القاسم المشترك الأكبر (gcd):

/^(1+)\1*=\1+$/.match('1' * x + '=' + '1' * y)[1].length

كل هذا و is_prime واحد يعمل في نفس الطريقة.يحاول جميع تركيبات قبل التخلي.

هذا واحد سوف محاولة تقسيم العدد الأول حتى في أجزاء المباراة الثانية مع واحد أو أكثر من تلك الأجزاء.إذا وجدت تطابق ذلك يعود طول الجزء المحدد.

إذا كان طول سلسلة 1 هو المركب ، ثم السلسلة يمكن أن تتحلل إلى عدة متطابقة سلاسل فرعية ، مثل 111111 -> 11 11 11

على سبيل المثال ، 1111111111 ، 10 1 ، وأنه مباريات (11){5} أو (11111){2} حيث {2} يعني تكرار 2 مرات.111111111 ، 9 1 ، وأنه مباريات (111){3}.

من خلال تعميم عدد 1 و عدد {} ، regexp هو /(1{2,}){2,}/.ومع ذلك ، 1{2,} ويمكن أيضا أن تكون مكتوبة 11+ و (...){2,} يمكن كتابتها كما (...)\1+ مع backreferences.

على ^1?$ في أول اختلاف بالتحقق من 0 و 1-الحالات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top