আপনার হ্যাশিং ফাংশনটি খুব ভাল একটি নয় * এ ছাড়াও , আপনার কোডের সাথে সবচেয়ে বড় সমস্যাটি এটি নয়। নেট এর সংস্করণ অনুসারে আলাদা আলাদা নম্বর দেয় তা নয়, তবে উভয় ক্ষেত্রেই এটি সম্পূর্ণ অর্থহীন সংখ্যা দেয়: সমস্যার সঠিক উত্তর হ'ল
49 103 মোড 143 = হ'ল 114 (( ওল্ফ্রাম আলফার লিঙ্ক )
আপনি এই উত্তরটি গণনা করতে এই কোডটি ব্যবহার করতে পারেন:
private static int PowMod(int a, int b, int mod) {
if (b == 0) {
return 1;
}
var tmp = PowMod(a, b/2, mod);
tmp *= tmp;
if (b%2 != 0) {
tmp *= a;
}
return tmp%mod;
}
আপনার গণনা আলাদা ফলাফল আনার কারণটি হ'ল উত্তর উত্পন্ন করার জন্য, আপনি একটি মধ্যবর্তী মান ব্যবহার করেন যা 49 103 সংখ্যার উল্লেখযোগ্য সংখ্যাগুলির বেশিরভাগ ড্রপ করে : এর 175 সংখ্যার মধ্যে প্রথম 16 টিই সঠিক!
1230824813134842807283798520430636310264067713738977819859474030746648511411697029659004340261471771152928833391663821316264359104254030819694748088798262075483562075061997649
বাকি 159 সংখ্যাগুলি সবই ভুল। মোড অপারেশন, এমন একটি ফলাফল সন্ধান করে যা প্রতিটি একক সংখ্যার সঠিক হওয়া দরকার, একেবারে শেষের সংখ্যাগুলি সহ। সুতরাং, এটির যথার্থতার এমনকি ক্ষুদ্রতম উন্নতি Math.Pow
.NET 4-এ কার্যকর করা হতে পারে, ফলে আপনার গণনার এক বিরাট পার্থক্য দেখা দেয়, যা মূলত একটি স্বেচ্ছাসেবী ফলাফল তৈরি করে।
* যেহেতু এই প্রশ্নটি পাসওয়ার্ড হ্যাশিংয়ের প্রসঙ্গে উচ্চ শক্তির সাথে পূর্ণসংখ্যার উত্থাপনের কথা বলে, আপনার বর্তমান পদ্ধতির সম্ভাব্যতর উন্নতির জন্য কোনও পরিবর্তন করা উচিত কিনা তা সিদ্ধান্ত নেওয়ার আগে এই উত্তর লিঙ্কটি পড়া ভাল ধারণা হতে পারে ।