(ক্রসড আউট 44 এখনও 44)) একটি বাইট সংরক্ষণের জন্য ফায়ারফ্লেম 241 ধন্যবাদ!
P=input();i=P/3
while i*10%P-1:i-=1
print i
এটি অনলাইন চেষ্টা করুন!
এর মধ্যে ঠিক একটি নম্বর রয়েছে 0
এবং P-1
যা একটি বিপরীত 10
। তবে যদি সেই বিপরীতটি যদি এর u
চেয়ে বেশি হয় P/2
তবে (u-P)
এটি একটি বিপরীতও হয় এবং এর চেয়ে কম পরিপূর্ণ মানও থাকে u
। সুতরাং দেখা যাচ্ছে যে আমরা সত্যিই অনন্য নম্বর খুঁজছেন x
মধ্যে -P/2
এবং P/2
যার একটি বিপরীত হয় 10
।
উপরের কোডটি ঠিক তেমনটি করে, (ফ্লোর) থেকে শুরু করে P/2
এবং কোনও বিপরীতমুখী না হওয়া পর্যন্ত নীচের দিকে পা বাড়ায়। এই তুলনায় কিছু সংখ্যা বৃহত্তর জন্য ঘটতে হবে -P/2
তাই যতদিন P
চেয়ে একটি মৌলিক বেশী 10
। আরও স্পষ্টভাবে, এটি P
কপিরাইটযুক্ত থাকলে এবং যদি শেষ হয় 10
।
সম্পাদনা: এটি প্রকৃতপক্ষে দেখা যাচ্ছে যা এর x
মধ্যে গ্যারান্টিযুক্ত -P/3
এবং P/3
তাই বর্তমান সংস্করণ শুরু হয় P/3
এবং সেখান থেকে নীচে নেমে আসে। এর ব্যাখ্যার জন্য উন্নত বাউন্ড লেবেলযুক্ত বিভাগটি দেখুন ।
গাণিতিক ব্যাখ্যা
বিভাজ্যতা পরীক্ষা কেন কাজ করেছে তা তাৎক্ষণিকভাবে আমার কাছে স্পষ্ট হয় নি। অন্য যে কেউ ভাবছে সে সম্পর্কে এখানে একটি ব্যাখ্যা দেওয়া হল।
আসল P
একটি প্রধান হতে যাক 10
, এর শেষ সংখ্যাটি এর চেয়ে বড় b
। এইভাবে
P = 10a + b
কোথায় a > 0
, এবং 0 <= b < 10
। বস্তুত b
পারেন হয় 1
, 3
, 7
, অথবা 9
, কারণ চেয়ে একটি মৌলিক বৃহত্তর 10
এই সংখ্যার এক আবশ্যক শেষ।
এখন ধরুন bx + a = 0 (mod P)
। তারপর
a = -bx (mod P)
10a + b = 10(-bx) + b (mod P)
0 = 10(-bx) + b (mod P)
0 = b(1 - 10x) (mod P)
যেহেতু P
প্রধান, সুতরাং পূর্ণসংখ্যাগুলি mod P
একটি অবিচ্ছেদ্য ডোমেন । সুতরাং হয় b = 0 (mod P)
, বা 1 - 10x = 0 (mod P)
।
আমরা জানি 0 <= b < 10 < P
, তাই যদি b = 0 (mod P)
তারপর b = 0
। কিন্তু আমরা বলেছিলাম b
হয় পারেন 1
, 3
, 7
, অথবা 9
, তাই এই অসম্ভব। সুতরাং 1 - 10x = 0 (mod P)
, তাই 10x = 1 (mod P)
। অন্য কথায় , মডুলোর x
বিপরীত হয় ।10
P
এখন ধরা যাক N
এমন একটি নন-নেগেটিভ পূর্ণসংখ্যা যার শেষ সংখ্যাটি d
, সুতরাং N = 10c + d.
আমাদের সমান বক্তব্যের একটি শৃঙ্খল রয়েছে:
10c + d = 0 (mod P)
<==> 10xc + dx = 0 (mod P)
<==> c + dx = 0 (mod P)
Qed।
উপযোগিতা কিসে?
আমিও ভাবছিলাম কিনা বিভাজ্যতা পরীক্ষা (প্রদত্ত N = 10c + d
, প্রতিস্থাপন N
দ্বারা dx + c
) প্রকৃতপক্ষে বাস্তবে ফলপ্রসূ সময়। বা কমপক্ষে, এটি নির্ভরযোগ্যভাবে (নিখুঁত মান) এর N
চেয়ে কম সংখ্যক দ্বারা প্রতিস্থাপন করবে N
?
ধরা যাক N = 10c + d
, কোথায় c >= 0
এবং 0 <= d < 10
। অতএব 10c = N - d <= N
। ত্রিভুজ অসমতার দ্বারা,
|c + dx| <= |c| + |dx| = c + d|x| <= N/10 + d|x|
< N/10 + 10|x| <= N/10 + 10P/2 = N/10 + 5P
সুতরাং যদি 5P <= 9N/10
, তারপর |c + dx| < N
।
বিশেষত, যদি N >= 6P
, তবে |c + dx| < N
। সুতরাং, প্রদত্ত P
আমরা গণনা করে শুরু 2P
, 3P
, ..., 6P
, সহ x
। তারপর দেওয়া N
, আমরা বিভাজ্যতা পরীক্ষা বারবার চালানো যতক্ষণ না আমরা একটি সংখ্যা কম পৌঁছানোর বা সমান 6P
, এবং চেক ফলাফলের সংখ্যার কোনো কিনা 0
, P
, 2P
, ...,6P
।
(অবশ্যই, যখনই আমরা নেতিবাচক সংখ্যায় পৌঁছাই, আমরা এটিকে তার পরম মান দ্বারা প্রতিস্থাপন করি, যেহেতু q
এটি ঠিক P
এবং যদি কেবল যদি (-q)
হয় তবে বিভাজ্য )
উন্নত বাউন্ড
আমি খেয়াল করেছিলাম যে |x|/P
কখনওই এর কাছাকাছি মনে হয় নি 1/2
। আসলে দেখে মনে হয়েছিল এটি সর্বদা 1/3
... বা কাছাকাছি পরীক্ষার চেয়ে কম ছিল , এটি সর্বদা হয় 1/10
বা এর খুব কাছাকাছি ছিল 3/10
। এটি সর্বকালের বৃহত্তম মনে হয়েছিল 4/13
(যা কখন P=13
এবং কখন ঘটে x=4
)। কেন এমন হবে?
যাক u
একটি পূর্ণসংখ্যা হতে হবে এবং যে অনুমান করা 10u = kP + 1
কিছু পূর্ণসংখ্যা জন্য k
, তাই u
একজন বিপরীত হয় 10
, মডিউল P
। তারপর আমরা এটিও জানি যে k
তুলনামূলকভাবে প্রধান 10
, যেহেতু মডুলোর k(-P)
সমতুল্য ।1
10
এখন আমরা জানি যে এর inverses 10
মডিউল P
সব গুণিতক দ্বারা পৃথক P
, তাই আমরা পূর্ণসংখ্যা নিতে পারেন u
এবং হয় যোগ অথবা এর গুণিতক বিয়োগ P
ইচ্ছা, এবং ফলাফলের সবসময় এখনও একজন বিপরীত হতে হবে 10
মডিউল P
। আমরা বিয়োগ করতে পছন্দ করে ধরুন P
থেকে u
: আমরা পেতে
10(u - P) = 10u - 10P = kP + 1 - 10P
10(u - P) = (k - 10)P + 1
অন্য কথায়, হ্রাস হ্রাস (যথাক্রমে, বৃদ্ধি) u
দ্বারা P
হ্রাস (বৃদ্ধি) এর সাথে মিলে k
যায় 10
। বাম-হাতের নিখুঁত মানকে ছোট না করা পর্যন্ত আমরা এর P
থেকে বহুগুণ যোগ / বিয়োগ u
করতে চাই; কিন্তু বাম দিকে ঠিক কমিয়ে আনা হয় যখন ডানদিকে কমিয়ে আনা হয়, এবং তাই আমরা যোগ করতে চান / বিয়োগ 10
থেকে k
যতক্ষণ না ডানদিকে পরম মান কমিয়ে আনা হয়।
কিন্তু আমরা জানি য়ে এই ঘটতে হবে যখন k
মধ্যে -5
এবং 5
, সেইজন্য এবং (যেহেতু k
অপেক্ষাকৃত প্রধানমন্ত্রীর হয় 10
) এই উপায়ে k
হয় -3
, -1
, 1
, অথবা 3
। (এটি ওপি এর অধীনে @ নীলের মন্তব্যের বিষয়বস্তু Thanks ধন্যবাদ, নীল! )
সুতরাং যখন |u|
ছোট করা (অর্থাত, u=x
), আমরা আছে x/P = u/P = k/10 + 1/(10P)
, যেখানে k
হয় -3
, -1
, 1
, অথবা 3
। অতএব |x|/P <= 3/10 + 1/(10P)
। সমানভাবে |x| <= (3P + 1)/10
,।
তদুপরি, এই বৈষম্য কঠোর P=11
, কারণ P=11
আমাদের আছে x=-1
এবং k=-1
। সামান্যতম P
যার জন্য সাম্যতা হ'ল P=13
(কোথায় x=4
এবং k=3
)।
অতএব সর্ববৃহৎ যেটি পাওয়া |x|/P
যায় তা হ'ল 3/10 + 1/(10*13)
কারণ P=13
আমাদের কাছে প্রথম প্রধান যা রয়েছে k=3
এবং যাদের মধ্যে তাদের মধ্যে k=3
এই 1/(10P)
শব্দটি সবচেয়ে বেশি থাকে যখন P
সবচেয়ে কম হয় (অর্থাত্ P=13
)। সুতরাং, সকলের জন্য P
, আমাদেরও রয়েছে |x|/P <= 3/10 + 1/130 = 4/13 < 1/3
। এটি ব্যাখ্যা করে যে উপরের কোডে আমরা আরম্ভ i = P/3
না করেই আরম্ভ করতে পারি P/2
।
তদতিরিক্ত, উপরের ইউটিলিটিস বিভাগে সীমাগুলি এখন উন্নত করা যেতে পারে।
লেমা : N = 10c + d
কোথায় c > 0
এবং কোথায় যাক 0 <= d <= 9
। তারপরে c + d|x| < N/10 + 9(3P + 1)/10
। (কঠোর বৈষম্য নোট করুন।)
লেমার প্রমাণ: কেস দ্বারা। কেস আই:, d = 0
তাই N = 10c
। তারপরে c + d|x| = c = N/10 < N/10 + 9(3P + 1)/10
।
কেস ২: 0 < d <= 9
। তারপর 10c = N - d < N
, তাই c < N/10
। অতএব c + d|x| < N/10 + d|x| <= N/10 + 9|x| <= N/10 + 9(3P + 1)/10
। Qed।
সুতরাং, যদি N > 3P
(এবং N = 10c + d
আগের মত) হয়, তবে
3P + 1 <= N
9(3P + 1)/10 <= 9N/10
N/10 + 9(3P + 1)/10 <= N
c + d|x| < N/10 + 9(3P + 1)/10 <= N
সুতরাং, N > 3P
তাহলে c + d|x| < N
।
অতএব, আমরা কেবল খুঁজে বের করতে হবে P
, 2P
এবং 3P
সাথে x
। প্রদত্ত N > 0
, যখন N > 3P
, আমরা প্রতিস্থাপন N
দ্বারা |c + dx|
, যা কমে যায় N
। শেষ পর্যন্ত আমরা পেয়ে যাব N <= 3P
; যে সময়ে আমরা বন্ধ এবং চেক কিনা N
সংখ্যার কোনো সমান 0
, P
, 2P
, অথবা 3P
।
আমরা 3P
সাধারণের চেয়ে ভাল করতে পারি না । উদাহরণস্বরূপ ধরুন P = 13
এবং N = 39
, তাই x = 4
। তারপর প্রতিস্থাপন N
দ্বারা dx + c = 9(4) + 3
পাতার N
অপরিবর্তিত।
x
নিখুঁত মানের মধ্যে ক্ষুদ্রতম খুঁজছি যেখানে10*x-1
ইনপুট দ্বারা বিভাজ্য।