大數的模指數運算

2021-10-11 21:44:47 字數 3066 閱讀 4575

在本文中我們將採用重複平方乘演算法,即如圖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...