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

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

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

2020-05-23 14:00:40
字體:
來源:轉載
供稿:網友

一、快速冪

其實就是求(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;} }

三、總結

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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 荔浦县| 得荣县| 无锡市| 定远县| 卢湾区| 保山市| 通辽市| 金秀| 钟祥市| 公主岭市| 孟村| 龙川县| 张家界市| 本溪| 慈利县| 临城县| 剑河县| 邹城市| 湾仔区| 固始县| 奈曼旗| 延安市| 苏尼特右旗| 巫山县| 江山市| 盐边县| 永登县| 定襄县| 大渡口区| 兴隆县| 泸西县| 辽宁省| 玉门市| 四子王旗| 获嘉县| 依兰县| 高安市| 子洲县| 盐山县| 泗阳县| 无为县|