इस तथ्य के अलावा कि आपका हैशिंग फ़ंक्शन बहुत अच्छा नहीं है * , आपके कोड के साथ सबसे बड़ी समस्या यह नहीं है कि यह .NET के संस्करण के आधार पर एक अलग संख्या लौटाता है, लेकिन यह कि दोनों ही मामलों में यह पूरी तरह से व्यर्थ संख्या देता है: समस्या का सही उत्तर है
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 में लागू किया गया हो सकता है, जिसके परिणामस्वरूप आपकी गणना में भारी अंतर होगा, जो अनिवार्य रूप से एक मनमाना परिणाम पैदा करता है।
* चूंकि यह सवाल पासवर्ड हैशिंग के संदर्भ में उच्च शक्तियों के पूर्णांक को बढ़ाने के बारे में बात करता है, इसलिए यह निर्णय लेने से पहले इस उत्तर लिंक को पढ़ना एक बहुत अच्छा विचार हो सकता है कि क्या आपके वर्तमान दृष्टिकोण को संभावित रूप से बेहतर के लिए बदल दिया जाना चाहिए।