wenbao与费马及快速幂

本文详细介绍了快速幂算法及费马小定理的相关概念,包括如何利用快速幂算法来高效计算大整数的幂次方,并探讨了在编程竞赛中为何常用1e9+7作为模数的原因。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

 

费马小定理:

  a^(b-1)%b == 1; (a, b互素)

费马大定理:

  a^(@b)%b == 1;(@b为欧拉函数)

 

 

快速幂:

  

根据幂次方的性质进行处理log2(b)次

 

 

 

随便说一下为什么很多题目取模的时候会用到 1e9+7 ? 因为它是素数(它的孪生素数 1e9+9 )任何数对大素数取模得到的答案能有效的减少冲突(如果取模的数不是素数那么会有许多同余的情况)

 

1 //求a^b;
2 
3 const int MOD = 1e9+7;
4 ll sum = 1;
5 while(b){
6     if(b & 1) sum = sum*a%MOD;
7     sum >>= 1;
8     a = a*a%MOD;
9 }

 

 

 1 #include <iostream>
 2 #include <stdio.h>
 3 #include <string.h>
 4 using namespace std;
 5 #define ll long long
 6 const ll MOD = 1e9+7;
 7 ll a, c;
 8 char str[100005];
 9 int main(){
10     while(~scanf("%lld%s%lld", &a, str, &c)){
11         a %= MOD, c %= MOD;
12         ll sum = 0;
13         int len = strlen(str);
14         for(int i = 0; i < len; i++){
15             sum = (sum*10 + str[i] - '0') % (MOD - 1LL);
16         }
17         while(sum){
18             if(sum & 1) c = c * a % MOD;
19             sum >>= 1;
20             a = a * a % MOD;
21         }
22         printf("%lld\n", c % MOD);
23     }
24     return 0;
25 }

 

 

 

只有不断学习才能进步!

 

转载于:https://www.cnblogs.com/wenbao/p/6097422.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值