ওভারফ্লো ত্রুটি ছাড়াই কম্পিউটার কীভাবে ঘনিষ্ঠ গণিত গণনা করতে পারে?


32

কিছু আরএসএ এনক্রিপ্ট / ডিক্রিপ্ট পদ্ধতিগুলি অধ্যয়ন করে আমি এই নিবন্ধটি পেয়েছি: আরএসএ অ্যালগরিদমের একটি উদাহরণ

এই বার্তাটি ডিক্রিপেট করার জন্য এটির প্রয়োজন এখানে চিত্র বর্ণনা লিখুন

মোট ফলাফল এখানে চিত্র বর্ণনা লিখুনএত বড়, একটি 64-বিট / 32-বিট মেশিনের জন্য, আমি বিশ্বাস করি না যে এটি একটি রেজিস্টারে এত বড় মূল্য রাখতে পারে। ওভারফ্লো ছাড়া কম্পিউটার কীভাবে এটি করে?


এই প্রশ্নটি সপ্তাহের একটি সুপার ব্যবহারকারী প্রশ্ন ছিল । আরও বিশদের জন্য ব্লগ এন্ট্রি
পড়ুন বা নিজে ব্লগে অবদান রাখুন


6
আমি অবাক হয়েছি যদি এটি সিএস.স্ট্যাকেক্সেঞ্জা.কম এ স্থানান্তরিত হয় তবে আপনি আরও ভাল উত্তর পেতে পারেন। এটি দেখে মনে হচ্ছে এটি কোনও সিএস / ম্যাথের সাইটে আরও ভাল ফিট হতে পারে যা কম জিনিসের প্রকৃত বিবরণে অনেক বেশি কেন্দ্রীভূত হয় সত্যই নিম্ন স্তরে।
জোড়দাচে

1
এটি সুপার ব্যবহারকারীর জন্য যথেষ্ট বৈধ।
জেমস মার্টজ

উত্তর:


40

কারণ পূর্ণসংখ্যা মডুলাস অপারেশনটি ring -> ℤ / nℤ এর একটি রিং হোমোমর্ফিিজম ( উইকিপিডিয়া ),

(X * Y) mod N = (X mod N) * (Y mod N) mod N

আপনি নিজেকে সাধারণ বীজগণিতের কিছুটা দিয়ে যাচাই করতে পারেন। (নোট করুন যে modকোনও মডুলার রিংয়ে গুণনের সংজ্ঞা দেওয়ার কারণে ডানদিকে চূড়ান্ত উপস্থিত হবে))

কম্পিউটারগুলি এই কৌশলটি প্রচুর সংখ্যার অঙ্ক গণনা না করে মডুলার রিংগুলিতে সূচকগুলি গণনা করতে ব্যবহার করে।

               / 1 আই = 0,
               |
(এক্স ^ আই) মোড এন = <(এক্স * (এক্স ^ (আই -১) মোড এন)) মোড এনআই বিজোড়,
               |
               X (এক্স ^ (আই / 2) মোড এন) mod 2 মোড এনআই সমান এবং আমি / = 0।

অ্যালগরিদমিক আকারে,

-- compute X^I mod N
function expmod(X, I, N)
    if I is zero
        return 1
    elif I is odd
        return (expmod(X, I-1, N) * X) mod N
    else
        Y <- expmod(X, I/2, N)
        return (Y*Y) mod N
    end if
end function

আপনি (855^2753) mod 3233যদি এটি চান তবে কেবল 16-বিট রেজিস্টারগুলির সাথে গণনা করতে এটি ব্যবহার করতে পারেন।

তবে, আরএসএতে এক্স এবং এন এর মানগুলি অনেক বড়, কোনও রেজিস্টারে ফিট করার পক্ষে খুব বড়। একটি মডুলাস সাধারণত 1024-4096 বিট দীর্ঘ হয়! সুতরাং আপনি কোনও কম্পিউটারকে "লম্বা" উপায়ে, একইভাবে আমরা হাতের মাধ্যমে গুণ করতে পারি। কেবল 0-9 অঙ্কগুলি ব্যবহার করার পরিবর্তে কম্পিউটার "শব্দের" 0-2 16 -1 বা এর মতো কিছু ব্যবহার করবে। (কেবলমাত্র 16 টি বিট ব্যবহারের অর্থ আমরা দুটি ভাষা বিট সংখ্যাকে গুণিত করতে পারি এবং সমাবেশের ভাষাটি না নিয়েই পুরো 32 বিট ফলাফল পেতে পারি assembly , পূর্ণ 128-বিট ফলাফল।)

-- Multiply two bigints by each other
function mul(uint16 X[N], uint16 Y[N]):
    Z <- new array uint16[N*2]
    for I in 1..N
        -- C is the "carry"
        C <- 0
        -- Add Y[1..N] * X[I] to Z
        for J in 1..N
            T <- X[I] * Y[J] + C + Z[I + J - 1]
            Z[I + J - 1] <- T & 0xffff
            C <- T >> 16
        end
        -- Keep adding the "carry"
        for J in (I+N)..(N*2)
            T <- C + Z[J]
            Z[J] <- T & 0xffff
            C <- T >> 16
        end
    end
    return Z
end
-- footnote: I wrote this off the top of my head
-- so, who knows what kind of errors it might have

এটি X কে Y এর শব্দের সংখ্যার সাথে প্রায় গুণমানের X এর সমান পরিমাণে X দ্বারা গুণন করবে This এটিকে O (N 2 ) সময় বলা হয়। যদি আপনি উপরের অ্যালগরিদমটি লক্ষ্য করেন এবং এটিকে আলাদা করেন, তবে তারা স্কুলে পড়ায় এটি একই "দীর্ঘ গুণ" " আপনার কাছে 10 টি সংখ্যার মধ্যে সারণী মুখস্থ করার সময় নেই, তবে আপনি যদি বসে বসে কাজটি করে থাকেন তবে আপনি এখনও 1,926,348 x 8,192,004 গুণ করতে পারেন।

দীর্ঘ গুণ:

    1,234
  x 5,678
---------
    9,872
   86,38
  740,4
6,170
---------
7,006,652

গুণনের জন্য চারদিকে কিছু দ্রুত অ্যালগরিদম রয়েছে ( উইকিপিডিয়া ) যেমন স্ট্রেসেনের দ্রুত ফুরিয়ার পদ্ধতি এবং কিছু সহজ পদ্ধতি যা অতিরিক্ত সংযোজন এবং বিয়োগফলকে কম গুণ করে এবং তাই সামগ্রিকভাবে দ্রুত শেষ হয়। জিএমপির মতো সংখ্যাযুক্ত গ্রন্থাগারগুলি সংখ্যাটি কত বড় তার ভিত্তিতে বিভিন্ন অ্যালগরিদম নির্বাচন করতে সক্ষম: ফুরিয়ার ট্রান্সফর্মটি বৃহত্তম সংখ্যার জন্য কেবল দ্রুততম, ছোট সংখ্যা সরল অ্যালগরিদম ব্যবহার করে।


+1, তবে আপনি mod Nচাইনিজ রিমেন্ডার উপপাদ্য শেষে একটি অতিরিক্ত মিস করছেন । (এর (16 mod 5)সমান নয় (4 mod 5) * (4 mod 5): পূর্ববর্তীটি 1,
শেষেরটি

@রুখ: সংশোধন হয়েছে। যদিও আমি সত্যিই বলতে চাই, আর / কেআরটি আর / কে 1 আর এক্স আর / কে 2 আর এক্স এর আইসোমরফিক হয় ... আর / এনআর, যেখানে কে 1..kn জোড়াযুক্ত কপিরাইট হয়, তাদের পণ্যটি কে, এবং আর একটি আদর্শ আদর্শ ডোমেন। আমি এত লম্বা ছিল যে এটা কোন কিছুই যেমন দেখতে কঠিন জন্য * ওভারলোডিং করে থাকেন কিন্তু মডুলার। অন্য কথায়, আমার সাধারণ নোটেশনাল কনভেনশনগুলির অধীনে modএটি অতিমাত্রায় হয় is
ডায়েটারিচ এপ্প

1
@ সিনিটেক: তবে আমি এই চারটি শব্দকে এত ভালবাসি: "পাঠকের জন্য অনুশীলন করুন।"
ডায়েটারিচ এপ্প

1
(X * Y) mod N = (X mod N) * (Y mod N) mod Nসত্য, তবে চীনা রিমেেন্ডার উপপাদ্যটির সাথে এর কোনও যোগসূত্র নেই।
ডেনিস

1
@ ডেনিস: আমি এখনই উত্তরে কোডোমেনের কাঠামো পরিষ্কার করেছি। (এটি কখনই আমার কাছে অস্পষ্ট নয়, যেহেতু আমি এটি লিখেছি ...)
ডায়েটারিচ এপ্প

9

সহজ উত্তরটি তারা নিজেরাই নয়, পারে না। প্রকৃতপক্ষে, আপনি যদি একটি এক্স-বিট মেশিনের ধারণাটি গ্রহণ করেন, তবে সীমিত সংখ্যক সংখ্যা রয়েছে যা সীমিত সংখ্যক বিট দ্বারা প্রতিনিধিত্ব করতে পারে, ঠিক যেমন একটি সীমিত সংখ্যার মধ্যে 2 ডিজিট দ্বারা প্রতিনিধিত্ব করা যেতে পারে দশমিক সিস্টেম।

বলা হচ্ছে, খুব বেশি সংখ্যক কম্পিউটারের উপস্থাপনা হ'ল একটি ধরেন একটি পূর্ণসংখ্যা কেবল 0-99 থেকে মান ধরে রাখতে পারে। কেউ কীভাবে 100 নম্বর উপস্থাপন করতে পারে? এটি প্রথমে অসম্ভব বলে মনে হতে পারে তবে এটি কেবলমাত্র একটি একক ভেরিয়েবল বিবেচনা করে। আমার যদি একটি পূর্ণসংখ্যা কল এবং একটি কল হয় , তবে আমি সহজেই 100: উপস্থাপন করতে পারি । আমি সহজে একটি বৃহত্তর সংখ্যা প্রতিনিধিত্ব করতে পারে, 9223 মত: । ক্রিপ্টোগ্রাফি ক্ষেত্রে বৃহত উপাদান component কম্পিউটারে খুব বড় সংখ্যক প্রতিনিধিত্ব করার বিভিন্ন উপায় রয়েছে, প্রতিটি পরেরটির মতো বিচিত্র।

এই পদ্ধতির প্রত্যেকটির বিভিন্ন সুবিধা এবং অসুবিধাগুলি রয়েছে এবং আমি সমস্ত পদ্ধতি এখানে / তালিকাভুক্ত করতে পারি না, আমি খুব সহজ একটি উপস্থাপনা করব।

unitshundredshundreds = 1; units = 0;hundreds = 92; units = 23

যদিও এটি একটি সহজ পদ্ধতি, তবে কেউ যুক্তি দিতে পারেন যে এটি খুব অদক্ষ। বেশিরভাগ অ্যালগরিদমগুলির মতো যা একটি কম্পিউটার কী করতে পারে তার সীমানাটিকে ধাক্কা দেয়, এটি সাধারণত শক্তি (বৃহত সংখ্যক প্রতিনিধিত্ব করে) এবং দক্ষতা (দ্রুত পুনরুদ্ধার / সঞ্চয়স্থান) এর মধ্যে একটি টগ-ও-যুদ্ধ হয়। আমি আগে যেমন বলেছি, কম্পিউটারে প্রচুর সংখ্যক প্রতিনিধিত্ব করার অনেকগুলি উপায় রয়েছে; কেবল একটি পদ্ধতি খুঁজে নিন এবং এটির সাথে পরীক্ষা করুন!

আমি আশা করি এটি আপনার প্রশ্নের উত্তর দিয়েছে!

আরও পড়া:এই নিবন্ধটি এবং এটি একটি আরও তথ্যের জন্য কার্যকর হতে পারে।


3

যেভাবে এটি করা যায় (বারবার স্কোয়ারিং এবং এর মতো অনেকগুলি দ্রুত উপায় রয়েছে) এর দ্বারা গুণ করা হয় এবং প্রতিটি গুণনের পরে মডিউলাস নেওয়া হয়। যতক্ষণ মডুলাস স্কোয়ার 2 ^ 32 (বা 2 ^ 64) এর চেয়ে কম হয় এটি কখনই ওভারফ্লো হতে পারে না।


3

একইভাবে আপনি পারেন।

আমি অনুমান করতে চলেছি যে 342 * 189 কী তা আপনি জানেন না। তবে আপনি নিম্নলিখিত তথ্যগুলি জানেন:

9 * 2 = 18
9 * 4 = 36
9 * 3 = 27
8 * 2 = 16
8 * 4 = 32
8 * 3 = 24
1 * 2 = 2
1 * 4 = 4
1 * 3 = 3

18 + 360 + 2700 + 160 + 3200 + 24000 + 200 + 4000 + 30000 = 64638

এই সাধারণ ঘটনাগুলি জেনে এবং সেগুলি চালনার কৌশল শিখে আপনি পাটিগণিত করতে পারেন যা আপনি অন্যথায় পারেননি।

একই টোকেনের সাহায্যে, এমন কম্পিউটার যা একসাথে 64৪ বিটের বেশি গণিত পরিচালনা করতে পারে না সহজেই বড় সমস্যাগুলি ছোট ছোট টুকরো টুকরো টুকরো করে ফেলতে পারে, সেই ছোট ছোট টুকরোগুলি করতে পারে এবং এগুলি আবার একসাথে রেখে বড়টির উত্তর তৈরি করতে পারে, পূর্বে অপরিবর্তনীয় সমস্যা


0

যতদূর সংযোজন এবং বিয়োগফলের বিষয়, অনেক সিপিইউতে একটি "ক্যারি বিট" থাকে যা গাণিতিক ক্রিয়াকলাপটি ওভারফ্লো হয়ে গেলে সেট করা থাকে। সুতরাং যদি কোনও ফলাফলের জন্য 8 বাইট সংরক্ষণের প্রয়োজন হয় এবং সিপিইউ 32-বিট (যা 4 8-বিট বাইট সহ প্রযোজ্য) হয় তবে এটি দুটি অতিরিক্ত ক্রিয়াকলাপ করতে পারে, প্রথমে "কম শব্দ" এবং তারপরে "উচ্চ শব্দ" -এ ওভারফ্লো যত্ন নেওয়ার বিট সঙ্গে। প্রথমে ক্যারি বিট সাফ করার জন্য প্রয়োজনীয়। উচ্চ বিট সিপিইউগুলি কার্যকারিতা বাড়ানোর এক কারণ কারণ এটি এতটা করতে হবে না।

অবশ্যই এটি 8-বিট সিপিইউ সহ আমার সীমাবদ্ধ সমাবেশের অভিজ্ঞতা r আমি জানি না কীভাবে ক্যারি বিটটি আধুনিক সিপিইউগুলির সাথে গুণিত এবং বিভক্ত নির্দেশাবলীর সাথে কাজ করে। নন-ইন্টেল আরআইএসসি সিপিইউগুলিও আলাদা আচরণ করতে পারে।

আমি ভাসমান পয়েন্ট গণিত সম্পর্কে খুব বেশি জানি না, তবে মূলত বাইটগুলি নির্দিষ্ট সংখ্যক স্থানের প্রতিনিধিত্ব করে তবে নির্দিষ্ট স্থান নয়। এ কারণেই এটিকে "ভাসমান" পয়েন্ট বলা হয়। সুতরাং, উদাহরণস্বরূপ, 34459234 নম্বরটি প্রায় 3.4459234, বা 3.4459234E + 20 (এটি 3.4459234 x 10 ^ 20) হিসাবে একই মেমরি স্পেসটি গ্রাস করবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.