সংক্ষিপ্ত বিবরণ
এই চ্যালেঞ্জে আপনাকে দুটি নম্বর দেওয়া হবে যা মাঝারি আকারের সংখ্যার একাধিকের চেয়ে দুটি ছোট অফসেট উভয়ই। আপনাকে একটি মাঝারি আকারের সংখ্যা আউটপুট করতে হবে যা একটি ছোট অফসেট বাদে প্রায় উভয় সংখ্যার বিভাজক।
জড়িত সংখ্যার আকার একটি অসুবিধা পরামিতি দ্বারা পরামিতি করা হবে l
,। আপনার উদ্দেশ্যটি হ'ল l
1 মিনিটের নিচে সবচেয়ে বড় পক্ষে সমস্যাটি সমাধান করা ।
সেটআপ
প্রদত্ত সমস্যায় একটি গোপন নম্বর p
থাকবে, যা একটি এলোমেলো l^2
( l*l
) বিট নম্বর হবে। সেখানে দুটি গুণক q1, q2
থাকবে, যা এলোমেলো l^3
বিট সংখ্যা হবে এবং দুটি অফসেট r1, r2
থাকবে, যা এলোমেলো l
বিট সংখ্যা হবে।
আপনার প্রোগ্রামের ইনপুটটি x1, x2
সংজ্ঞায়িত হবে :
x1 = p * q1 + r1
x2 = p * q2 + r2
পাইথনে পরীক্ষার কেস উত্পন্ন করার জন্য এখানে একটি প্রোগ্রাম রয়েছে:
from random import randrange
from sys import argv
l = int(argv[1])
def randbits(bits):
return randrange(2 ** (bits - 1), 2 ** bits)
p = randbits(l ** 2)
print(p)
for i in range(2):
q_i = randbits(l ** 3)
r_i = randbits(l)
print(q_i * p + r_i)
আউটপুট প্রথম লাইন একটি সম্ভাব্য সমাধান, যখন দ্বিতীয় এবং তৃতীয় লাইনগুলি আপনার প্রোগ্রামটি প্রদত্ত ইনপুট।
আপনার প্রোগ্রাম
প্রদত্ত x1
, x2
এবং l
, আপনি একটি খুঁজে বের করতে হবে l^2
বিট সংখ্যা p'
যেমন যে x1 % p'
এবং x2 % p'
উভয় l
বিট নম্বর। p
অন্যান্য সম্ভাবনা থাকতে পারে, যদিও সর্বদা কাজ করবে। সমাধান যাচাই করার জন্য এখানে একটি ফাংশন রয়েছে:
def is_correct(x1, x2, l, p_prime):
p_prime_is_good = p_prime >> (l**2 - 1) and not p_prime >> l ** 2
x1_is_good = (x1 % p_prime) >> (l-1) and not (x1 % p_prime) >> l
x2_is_good = (x2 % p_prime) >> (l-1) and not (x2 % p_prime) >> l
return bool(p_prime_is_good and x1_is_good and x2_is_good)
উদাহরণ
ধরুন l
, জেনারেটর প্রোগ্রামটি একটি 9-বিট নম্বর বাছাই করে p
, যা এই ক্ষেত্রে 442
। জেনারেটরের 3
জন্য দুটি বিট সংখ্যা বাছাই করে r1, r2
, যা 4, 7
। জেনারেটরের 27
জন্য দুটি বিট সংখ্যা বাছাই করে q1, q2
, যা 117964803, 101808039
। কারণ এই পছন্দগুলি, x1, x2
হয় 52140442930, 44999153245
।
আপনার প্রোগ্রামটি 52140442930, 44999153245
ইনপুট হিসাবে দেওয়া হবে , এবং অবশ্যই একটি 9-বিট নম্বর ( পরিসীমাতে [256, 511]
) আউটপুট করতে হবে 52140442930
এবং 44999153245
মডুলো যে 3 বিট নম্বর দেয় (পরিসীমাতে [4, 7]
)। 442
এক্ষেত্রে একমাত্র এই জাতীয় মান, সুতরাং আপনার প্রোগ্রামটি আউটপুট করতে হবে 442
।
আরও উদাহরণ
l = 2
x1 = 1894
x2 = 2060
p = 11
No other p'.
l = 3
x1 = 56007668599
x2 = 30611458895
p = 424
No other p'.
l = 6
x1 = 4365435975875889219149338064474396898067189178953471159903352227492495111071
x2 = 6466809655659049447127736275529851894657569985804963410176865782113074947167
p = 68101195620
I don't know whether there are other p'.
l = 12
x1 = 132503538560485423319724633262218262792296147003813662398252348727558616998821387759658729802732555377599590456096450977511271450086857949046098328487779612488702544062780731169071526325427862701033062986918854245283037892816922645703778218888876645148150396130125974518827547039720412359298502758101864465267219269598121846675000819173555118275197412936184329860639224312426860362491131729109976241526141192634523046343361089218776687819810873911761177080056675776644326080790638190845283447304699879671516831798277084926941086929776037986892223389603958335825223
x2 = 131643270083452525545713630444392174853686642378302602432151533578354175874660202842105881983788182087244225335788180044756143002547651778418104898394856368040582966040636443591550863800820890232349510212502022967044635049530630094703200089437589000344385691841539471759564428710508659169951391360884974854486267690231936418935298696990496810984630182864946252125857984234200409883080311780173125332191068011865349489020080749633049912518609380810021976861585063983190710264511339441915235691015858985314705640801109163008926275586193293353829677264797719957439635
p = 12920503469397123671484716106535636962543473
I don't know whether there are other p'.
l = 12
x1 = 202682323504122627687421150801262260096036559509855209647629958481910539332845439801686105377638207777951377858833355315514789392768449139095245989465034831121409966815913228535487871119596033570221780568122582453813989896850354963963579404589216380209702064994881800638095974725735826187029705991851861437712496046570494304535548139347915753682466465910703584162857986211423274841044480134909827293577782500978784365107166584993093904666548341384683749686200216537120741867400554787359905811760833689989323176213658734291045194879271258061845641982134589988950037
x2 = 181061672413088057213056735163589264228345385049856782741314216892873615377401934633944987733964053303318802550909800629914413353049208324641813340834741135897326747139541660984388998099026320957569795775586586220775707569049815466134899066365036389427046307790466751981020951925232623622327618223732816807936229082125018442471614910956092251885124883253591153056364654734271407552319665257904066307163047533658914884519547950787163679609742158608089946055315496165960274610016198230291033540306847172592039765417365770579502834927831791804602945514484791644440788
p = 21705376375228755718179424140760701489963164
স্কোরিং
উপরে উল্লিখিত হিসাবে, আপনার প্রোগ্রামের স্কোরটি সর্বোচ্চ l
1 যা প্রোগ্রামটি 1 মিনিটের নীচে পূর্ণ হয়। আরও সুনির্দিষ্টভাবে, আপনার প্রোগ্রামটি l
এটির সাথে 5 টি এলোমেলো দৃষ্টান্তে চালিত হবে এবং এটি অবশ্যই 5 মিনিটের নীচে গড়ে সময় সহ পুরো 5 টিতে একটি সঠিক উত্তর দিতে পারে। কোনও প্রোগ্রামের স্কোর এটি সর্বোচ্চ l
সাফল্য অর্জন করবে । টাইব্রেকার এটার গড় সময় হবে l
।
কীসের স্কোরগুলি লক্ষ্য করা যায় তার একটি ধারণা দেওয়ার জন্য, আমি একটি খুব সাধারণ উদ্দীপনা সমাধানকারী লিখেছি। এটি 5 এর স্কোর পেয়েছে I আমি অনেক ফ্যানসিয়ার সলভার লিখেছি। ভাগ্যের উপর নির্ভর করে এটি 12 বা 13 এর স্কোর পেয়েছে।
বিস্তারিত
উত্তরের তুলনায় নিখুঁত তুলনামূলকতার জন্য, আমি ক্যাপাসিক স্কোর দেওয়ার জন্য আমার ল্যাপটপে সাবমিশনের সময় নেব। ভাগ্য কিছুটা হলেও কমিয়ে আনার জন্য আমি সমস্ত দাখিলের ক্ষেত্রেও এলোমেলোভাবে বেছে নেওয়া উদাহরণগুলি চালাব। আমার ল্যাপটপে 4 সিপিইউ রয়েছে, i5-4300U সিপিইউ @ 1.9 গিগাহার্টজ, র্যামের 7.5 জি।
আপনার নিজের সময়ের ভিত্তিতে অস্থায়ী স্কোর পোস্ট করতে নির্দ্বিধায়, কেবল এটি পরিষ্কার করুন যে এটি অস্থায়ী বা স্বীকৃত।
দ্রুততম প্রোগ্রামের জয় হোক!
l^2
বিট সংখ্যা l
উভয় সংখ্যার ফ্যাক্টর হওয়ার থেকে দূরে চলে works তবে সাধারণত একটাই আছে।