(ক্রসড আউট 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বিপরীত হয় ।10P
এখন ধরা যাক 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)সমতুল্য ।110
এখন আমরা জানি যে এর 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ইনপুট দ্বারা বিভাজ্য।