国产探花免费观看_亚洲丰满少妇自慰呻吟_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;} }

三、總結

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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 凉城县| 大足县| 连云港市| 建湖县| 邵阳市| 大埔县| 临颍县| 阿拉善盟| 太仆寺旗| 吉木萨尔县| 丹棱县| 图片| 辽宁省| 嘉禾县| 革吉县| 精河县| 雷波县| 阆中市| 乌兰察布市| 谷城县| 柘荣县| 延边| 伊春市| 安多县| 汾阳市| 丽水市| 南江县| 神木县| 高州市| 城步| 夏邑县| 仙桃市| 镇安县| 麻城市| 灌云县| 石楼县| 邻水| 万山特区| 宁波市| 宁波市| 横山县|