ক্ষুদ্রতম গুণক যা সেমিপ্রাইমের একটি উপাদানকে প্রকাশ করে


16

প্রদত্ত semiprime এন , ক্ষুদ্রতম ধনাত্মক পূর্ণসংখ্যা এটি মি যেমন যে দুটি উপাদানগুলির একটি বাইনারি উপস্থাপনা এন বাইনারি উপস্থাপনা খুঁজে পাওয়া যেতে পারে এন * মি

উদাহরণ

আসুন সেমিপ্রাইম এন = 9799 বিবেচনা করুন ।

আমরা 1 থেকে শুরু করে এম এর বিভিন্ন মান চেষ্টা করি

 m |  N * m |   N * m in binary
---+--------+------------------
 1 |   9799 |    10011001000111
 2 |  19598 |   100110010001110
 3 |  29397 |   111001011010101
 4 |  39196 |  1001100100011100
 5 |  48995 |  1011111101100011
 6 |  58794 |  1110010110101010
 7 |  68593 | 10000101111110001
 8 |  78392 | 10011001000111000
 9 |  88191 | 10101100001111111
10 |  97990 | 10111111011000110
11 | 107789 | 11010010100001101

আমরা এখানে থামছি কারণ সর্বশেষ পণ্যের বাইনারি উপস্থাপনাটিতে রয়েছে 101001যা বাইনারি উপস্থাপনাটি 41 , এটি 9799 এর দুটি কারণগুলির মধ্যে একটি (অন্যটি 239 )।

উদাহরণ

সুতরাং উত্তর 11 হবে

বিধি এবং নোট

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

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

প্রথম কলামটি ইনপুট। দ্বিতীয় কলামটি প্রত্যাশিত আউটপুট।

         N |    m |         N * m |                              N * m in binary | Factor
-----------+------+---------------+----------------------------------------------+-------
         9 |    3 |            27 |                                      [11]011 |      3
        15 |    1 |            15 |                                       [11]11 |      3
        49 |    5 |           245 |                                   [111]10101 |      7
        91 |    1 |            91 |                                    10[1101]1 |     13
       961 |   17 |         16337 |                             [11111]111010001 |     31
      1829 |    5 |          9145 |                             1000[111011]1001 |     59
      9799 |   11 |        107789 |                          1[101001]0100001101 |     41
     19951 |   41 |        817991 |                       1[1000111]101101000111 |     71
    120797 |   27 |       3261519 |                     11000[1110001]0001001111 |    113
   1720861 |  121 |     208224181 |               11000110100[100111111101]10101 |   2557
 444309323 |  743 |  330121826989 |    100110011011100110010[1101010010101011]01 |  54443
 840000701 | 4515 | 3792603165015 | 11011100110000[1000110000111011]000101010111 |  35899
1468255967 |   55 |   80754078185 |      1001011001101010100010[1110001111]01001 |    911

হুম, আমি আপনার ব্ল্যাকজ্যাক সিক্যুয়েন্স চ্যালেঞ্জের মতো আমরা একইরকম একটি অ্যালগোরিদম গন্ধ পেয়েছি ...
ETH প্রোডাকশনগুলি

@ এথ প্রডাকশন হুঁ, সত্যি? তারা সত্যই সম্পূর্ণরূপে সম্পর্কিত নয় বলে মনে করা হচ্ছে।
21:55 এ

ওয়েল, এগুলি মূলত একই রকম যে আপনাকে একটি নির্দিষ্ট সম্পত্তির জন্য প্রতিটি মিলিত সাবস্ট্রিং পরীক্ষা করতে হবে। এগুলি ছাড়া তারা সত্যিই বেশ সম্পর্কযুক্ত।
ETH প্রোডাকশনগুলি

"এবং সম্ভবত উত্সাহিত" - আমি দুঃখিত। আমরা আমাদের কোডের গতি সম্পর্কে চিন্তা করি না।
জন ডিভোরাক

@ জনডভোরাক মেলা যথেষ্ট। সরানো হয়েছে।
আর্নৌল্ড

উত্তর:


6

পাইথ, 13 বাইট

ff}.BY.B*TQPQ

প্রদর্শন

ব্যাখ্যা:

ff}.BY.B*TQPQ
f                Find the first integer >= to 1 where the following is true
 f         PQ    Filter the prime factors of the input
        *TQ      Multiply the input by the outer integer
      .B         Convert to a binary string
   .BY           Convert the prime factor to a binary string
  }              Check whether the factor string is in the multiple string.

6

05 এ বি 1 , 18 16 15 বাইট

-২ বাইট ধন্যবাদ রিলিকে!

-1 বাইট ধন্যবাদ এমিগনাকে!

[N¹*b¹Ñ¦¨båOiNq

ব্যাখ্যা:

[                   # Infinite loop start
 N                  # Push the amount of times we have iterated
  ¹*               # Multiplied by input
    b              # Convert to binary
     ¹Ñ¦¨b         # Calculate the proper divisors of the input in binary excluding one
          åO       # Check if a substring of N * m in binary is in the divisors
            iNq    # If so, print how many times we have iterated and terminate the program

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


¹Ñ¦¨båOপ্রতিটি স্ট্রিং পরীক্ষা করার পরিবর্তে কাজ করা উচিত।
রিলে

@ রিলি যে সন্ধানের জন্য ধন্যবাদ!
Okx

2
আপনি অন্য বাইট প্রতিস্থাপন সংরক্ষণ করতে পারবেন ¼এবং ¾সঙ্গে N
এমিগিনা

@ এমিগনা আমি সেই কৌশল সম্পর্কে জানতাম না, ধন্যবাদ!
Okx

4

জাভাস্ক্রিপ্ট (ES6), 96 95 80 বাইট

n=>F=m=>(k=p=>p&&(q=1,g=x=>1<x&&x<n&n%x<1|g(x>>1,q*=2))(p)|k(p-q))(n*m)?m:F(-~m)

এমন একটি ফাংশন যা পুনরাবৃত্তি ফাংশন দেয় যা একটি পুনরাবৃত্তি ফাংশন ব্যবহার করে যা পুনরাবৃত্তি ফাংশন ব্যবহার করে। আমি সত্যিই ভাবতে শুরু করি যে .toString(2)রুটটি আরও ছোট হবে কিনা ...

একটি ভেরিয়েবলকে বরাদ্দ করুন f=n=>...এবং অতিরিক্ত পেরেনের সাথে কল করুন f(9)(),। যদি এটি অনুমোদিত না হয় ( মেটা পোস্টটি + 6 / -2 এ রয়েছে), আপনি স্ট্যান্ডার্ড অনুরোধ সহ এই 83-বাইট সংস্করণটি ব্যবহার করতে পারেন:

f=(n,m)=>(k=p=>p&&(q=1,g=x=>1<x&&x<n&n%x<1|g(x>>1,q*=2))(p)|k(p-q))(n*m)?m:f(n,-~m)

উভয় সংস্করণ সবশেষে শেষ তিনটি পরীক্ষার ক্ষেত্রে কাজ করে। আপনি এই পরীক্ষাগুলির ক্ষেত্রেও পরিবর্তন করে দেখতে x>>1পারেন (x-x%2)/2


এটি সম্পর্কে সত্যিই sensক্যমত্য আছে কিনা তা নিশ্চিত নই ( পোস্ট করার সময় আমরা + 6 / -2 তে আছি) তবে যতক্ষণ আমি উদ্বিগ্ন, প্রথম ইনপুট ফর্ম্যাটটি ঠিক আছে।
আর্নৌল্ড

3

বাশ + ইউনিক্স ইউটিলিটিস, 85 84 বাইট

for((;;m++)){ dc -e2o$[$1*m]n|egrep -q $(dc "-e2o`factor $1`nBEPn")&&break;}
echo $m

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


আমি আরও উল্লেখ করতে পারি যে এম যে কোনও সেমিপ্রাইম এন এর জন্য সর্বদা উপস্থিত থাকে। কারণটা এখানে:

N = pq লিখুন, যেখানে p এবং q মূল এবং p <= q হয়।

এন -1 এর বাইনারি উপস্থাপনায় অঙ্কের সংখ্যা খ। তারপরে, 0 এবং n-1 সমেত যে কোনও কে-এর জন্য, পি * (2 ^ বি) + কে বাইনারিতে পি এর বাইনারি উপস্থাপনা এবং তারপরে কে অতিরিক্ত বিটগুলি উপস্থাপন করে।

সুতরাং পি * (2 ^ বি) + কে 0 <= কে <= এন-1 এর জন্য সংখ্যা, বাইনারিতে লেখা হয়, সমস্ত পি এর বাইনারি উপস্থাপনা দিয়ে শুরু হয়। তবে এগুলি n ধারাবাহিক সংখ্যা, সুতরাং তাদের মধ্যে একটি এন এর একাধিক হতে হবে।

এটি অনুসরণ করে যে আমাদের এন এর একাধিক এমএন রয়েছে যার বাইনারি উপস্থাপনা পি এর বাইনারি উপস্থাপনার সাথে শুরু হয়।

এর উপর ভিত্তি করে, একটি 2 বর্গমিটার (এন) এর জন্য উপরের বাউন্ডের সাথে আসতে পারে। (এটির চেয়ে সম্ভবত আরও শক্ততর উপরের দিকের আবহাওয়া পাওয়া যায়))


2

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

import Data.List
(!)=mod
a#b|a!b==0=b|0<1=a#(b+1)
g 0=[]
g n=g(n`div`2)++show(n!2)
(a%b)c|g b`isInfixOf`g(a*c)=c|0<1=a%b$c+1
f n=min(n%(n#2)$1)$n%(n`div`(n#2))$1

সোজা চেক। প্রথমে ফ্যাক্টর, তারপরে 1 থেকে রৈখিকভাবে শুরু করে অনুসন্ধান করুন এবং উভয় কারণের জন্য সর্বনিম্ন মানটি নিন।

সর্বশেষ টেস্টকেস ( 1468255967) এর জন্য কয়েক সেকেন্ড সময় নেয় , আমার ল্যাপটপে ghciরিপোর্ট (15.34 secs, 18,610,214,160 bytes)করে।



2

ব্র্যাচল্যাগ (2), 14 বাইট

ḋḃᵐD∧?:.×ḃs∈D∧

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

ব্র্যাচল্যাগে 14 বাইটে এটি লেখার একাধিক উপায় রয়েছে, তাই আমি সবচেয়ে দক্ষ হয়ে উঠি। যেমন ব্র্যাচল্যাগ জমা দেওয়ার ক্ষেত্রে সাধারণ, এটি একটি ফাংশন জমা; এর ইনপুটটি সেমিপ্রাইম, এর আউটপুটটি গুণক।

ব্যাখ্যা

ḋḃᵐD∧?:.×ḃs∈D∧
ḋ               Prime decomposition (finds the two prime factors)
 ḃᵐ             Convert each factor to binary
   D            Name this value as D
    ∧?          Restart with the user input
      :.×       The output is something that can be multiplied by it
         ḃ      to produce a number which, when expressed in binary
          s     has a substring
           ∈D   that is an element of D
             ∧  (suppress an implicit constraint that D is the output; it isn't)

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


1

পাওয়ারশেল , 136 বাইট

param($n)$a=2..($n-1)|?{!($n%$_)}|%{[convert]::ToString($_,2)};for(){$b=[convert]::toString(++$m*$n,2);if($a|?{$b-like"*$_*"}){$m;exit}}

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

পাওয়ারশেলে রূপান্তর-থেকে-বাইনারি কীভাবে কাজ করে তার কারণে খুব দীর্ঘ। : - /

লাগে ইনপুট $nমাধ্যমে লুপ 2থেকে $n-1বের কারণের টানাপড়েনে !($n%$_)। একটি লুপ মধ্যে যারা পাঠায় |%{...}এবং convertএকটি বাইনারি (বেস তাদের প্রতিটি গুলি 2) স্ট্রিং। সেই বাইনারি স্ট্রিংগুলিকে স্টোর করে $a

তারপরে আমরা একটি অসীম for(){...}লুপ প্রবেশ করি । প্রতিটি পুনরাবৃত্তি, আমরা বৃদ্ধি করি ++$m, এটি দ্বারা গুন করি $nএবং convertএটি বাইনারি স্ট্রিংয়ে সঞ্চিত $b। তারপরে, ifসেই স্ট্রিংটি -likeকোনও স্ট্রিংকে রেজেক্স করে $a, আমরা আউটপুট $mএবং exit


0

পার্ল 6 , 66 বাইট

->\n{first {(n*$_).base(2)~~/@(grep(n%%*,2..^n)».base(2))/},^∞}

Regex-ভিত্তিক।

দুর্দান্ত ধীর, কারণ এটি চেষ্টা করা হয় এমন প্রতিটি সংখ্যার প্রতিটি রেজেক্স ম্যাচের পজিশনে আবার n এর গুণককে জোর করে।

শুধুমাত্র একবারগুলি গণনা করা, কর্মক্ষমতা উন্নত করে তবে এটি 72 বাইট করে:

->\n{my @f=grep(n%%*,2..^n)».base(2);first {(n*$_).base(2)~~/@f/},^∞}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.