在本文中我們將採用重複平方乘演算法,即如圖1:
來解決類似於求a^e mod m的值的問題(a、e、m的位數均可以達到1024位,即計算機無法直接用基本資料型別儲存的資料),在**中一共有6個函式:
第乙個為大數減法函式,第二個為大數除法函式,第三個為大數除法函式中的判斷輔助函式,第四個為十進位制轉換為二進位制函式,第五個為大數平方函式,第六個為大數乘法函式,有返回值的函式的返回值均是運算元組運算後的位數,**如下:
#include
#include
int digit;
int a[
1024
],e[
1024
],m[
1024
],b[
1024];
//程式操作使用的整數陣列
char s_a[
1024
],s_e[
1024
],s_m[
1024];
//由使用者輸入的底數、指數、模數
void
bigsubtract
(int x,
int y,
int len1,
int len2)
;int
bigdivision
(int x,
int y,
int len1,
int len2)
;int
judge
(int x,
int y,
int len1,
int len2)
;int
decimal_to_binary
(int e,
int e_length)
;int
bigsquare
(int a,
int a_length)
;int
bigmult
(int a,
int b,
int a_length,
int b_length)
;int
main()
else
for(j=
1;j)//以二進位制陣列的長度為迴圈,進行對應的操作
printf
("使用者輸入的資料的模運算結果為:");
//打出實驗結果
for(i=b_length-
1;i>=
0;i--
)printf
("%d"
,b[i]);
}//大數乘法運算
intbigmult
(int a,
int b,
int a_length,
int b_length)
for(i=
0;i<
1024
;i++
) b[i]
=a1[i]
;for
(i=1023
;i>=
0;i--
)//計算b陣列的數字
if(b[i]
)break
;return i+1;
}//大數平方乘運算
intbigsquare
(int a,
int len1)
for(i=
0;i<
1024
;i++
) a[i]
=a1[i]
;for
(i=1023
;i>=
0;i--
)//計算a陣列的數字
if(a[i]!=0
)break
;return i+1;
}//十進位制轉換為二進位制
intdecimal_to_binary
(int e,
int e_length)
e[e_length-1]
=e[e_length-1]
/2;for
(i=e_length-
1;i>=
0;i--)}
}next:
for(i=
0;i<=j;i++
)//將轉換為二進位制的陣列複製到全域性變數指數陣列中
e[i]
=m[i]
;return j;
}//大數減法運算
void
bigsubtract
(int x,
int y,
int len1,
int len2)
else
x[i]
=x[i]
-y[i];}
for(i=len1;x>=
0;i--)}
}//大數除法運算
intbigdivision
(int a,
int b,
int len1,
int len2)
else
//當被除數字數 大於或者 除數字數時
len2=len1;
//將兩個大數數字相同
digit=len1;
//將原被除數字數賦值給digit
for(j=
0;j<=len;j++)if
(temp<0)
}for
(i=len1;i>
0;i--
)int z=i+1;
for(i=
0;i<
1024
;i++
)//計算出b的數字大小
b[i]
=m[i]
;return z;}}
//大數除法運算的輔助函式
intjudge
(int x,
int y,
int len1,
int len2)
return0;
//被除數 等於 除數,返回值為0
}}
大數運算 模加減運算
一 vs平台 利用c語言對大數運算中的模加減運算進行了編碼。二 編碼思想 條件 大數a 大數b 模p 結果r 1 加法 首先,判斷a b這兩個大數是否小於模p。如果a和b都小於模p,則 若a b p,r a b p 若a b 如果a和b其中有乙個大於模p或者都大於模p,先將a或b減去p,直到a和b都...
大數取模運算
問題分析 1 大數儲存 由於x的位數最大為400位,我們不能用現有的int,long,long long,double等資料型別進行儲存。一般儲存大數的方法是用乙個字串來表示。2 取模運算 模擬手算豎式的方法。用x從高到低的每一位加上前一位餘數 10來對bi進行 最後得到的結果就是x bi的結果。利...
指數取模演算法
題目 給定a,b 求出 a a a.a b個a 輸入 a b 輸出 運算結果 樣例 2 3 輸出 16 範圍 a,b 10 9 我們首先可以得到答案的式子 ans a a b 1 然而 a b 1 作為指數太大了,必須取模 令y a b 1 p 1e9 7 y k p y p 因為x p 1 mod...