大數運算 模加減運算

2021-08-20 19:00:49 字數 1198 閱讀 7066

一、 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都小於模p為止,a1=(a-p)2、減法

首先,判斷a、b這兩個大數是否小於模p。

如果a和b都小於模p,則:

若a[i] > b[i],則 r = a[i] - b[i];

若a[i] < b[i],則 r = a[i] - b[i] + p[i]

如果a和b其中有乙個大於模p或者都大於模p,先將a或b減去p,直到a和b都小於模p為止,a1=(a-p)若a1[i] > b1[i],則 r = a1[i] – b1[i];

若a1[i] < b1[i],則 r = a1[i] – b1[i] + p[i]

注:並且存在加法就會有進製,存在減法就會有借位。

a b < p

若 a+b>p   則 r = a+b-p;

若a+b則 r = a+b;

a b > p

先a1 = (a-p)

則:r = a1 + b1;

a b < p

若a>b    r=a-b

若aa b > p

先a1=(a-p)

若a1>b1     r=a-b

若a1三、**說明

void format_conversion(sint32 *current_datat, sint32*objective_data);

該函式是乙個大小端轉換的乙個函式。

uint32 numerical_transformation(sint32 *num_a, sint32*num_p, sint32 *num_b);

該函式為將a與p進行比較,如果a>p,則進行a-p,直到a

uint32 module_add_sub(sint32 *add_sub_a, sint32 *add_sub_b,sint32 *add_sub_p, uint32 mode, sint32 *add_sub_c);

該函式這是主體函式進行大數模加減運算。

大數加減乘除及模運算

自己寫的 測試了幾組測試樣例,都沒什麼問題,如下 define crt secure no deprecate include include include includeusing namespace std const int maxn 3000000 80 const int m 20000...

大數運算 支援加減乘運算

本程式僅為演示,僅供參考,沒有考慮負數情況。優點 1 支援任意數量的數字,直到記憶體不足 2 c 運算子過載,方便使用。不足 1 沒有實現除法運算 1 pragma once 2 include 3 include 4 include 56 using namespace std 78 class ...

大數取模運算

問題分析 1 大數儲存 由於x的位數最大為400位,我們不能用現有的int,long,long long,double等資料型別進行儲存。一般儲存大數的方法是用乙個字串來表示。2 取模運算 模擬手算豎式的方法。用x從高到低的每一位加上前一位餘數 10來對bi進行 最後得到的結果就是x bi的結果。利...