国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++快速冪與大數取模算法示例

2020-01-26 14:26:42
字體:
來源:轉載
供稿:網友

一、快速冪

其實就是求(a^b)% p ,(其中a,b,p都比較大在int范圍內)這類問題。

首先要知道取余的公式: (a*b)%p=(a%p*b%p)%p

那么冪不就是乘機的累積嗎,由此給出代碼:

int fast(int a,int b,int p){  long long a1=a,t=1;  while(b>0)    { if(b&1)     /如果冪b是奇數多乘一次,因為后邊會除2變偶數,(7/2=3)  t=(t%p)*(a1%p)%p;  a1=(a1%p)*(a1%p)%p;   b/=2;  } return (int)(t%p);}

二、大數取模

它的原理就是這個取余公式: (a+b)%p=(a%p+b%p)%p;

那么大數可以看做每一位的那位數字乘以自身的權然后每位相加。

如:12345678=(1*10000000)+(2*1000000)+…+8。

代碼如下:

char s[200];#define mod 10000010;int main(){  while(gets(s)){  int k=strlen(s),sum=0; for(int i=0;i<k;i++) sum=(sum*10+s[i]-'0')%mod;  /當然要是擔心sum還可能溢出,那就對里邊再拆開來取余 cout<<sum<<endl;} }

三、總結

以上就是本文的全部內容,希望對大家的學習和工作能有所幫助。如果有疑問可以留言交流。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 洛川县| 资中县| 平顶山市| 白玉县| 宁夏| 丽江市| 哈巴河县| 昌图县| 乐至县| 绥芬河市| 大方县| 随州市| 陇西县| 辽中县| 威宁| 盘山县| 彭水| 嵊州市| 满洲里市| 永登县| 三明市| 科尔| 津市市| 浏阳市| 青阳县| 湾仔区| 特克斯县| 彰化县| 循化| 通许县| 吴川市| 宝鸡市| 佛冈县| 红安县| 田阳县| 广水市| 邮箱| 荆州市| 梧州市| 保山市| 台中市|