hdu1061+hdu2817快速幂


更新:calculate(a*b)modp通过乘法会溢出,所以通过加法加上long long 实现。

代码如下:

#include<iostream>
using namespace std;
typedef long long ll ;
ll power(ll a,ll b,ll p){
    a%=p,b%=p;
    ll ans=0;
    while(b){
        if(b&1) ans=(ans+a)%p;//ans+a最多只会是2*(le18),不会超过ll的范围 
        a=(a*2)%p;
        b>>=1;
    }
    return ans;
}
int main(){
    ll a,b,p;
    cin>>a>>b>>p;
    cout<<power(a,b,p)<<endl;
} 

 

代码如下

hdu1061:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef unsigned int ui;
 4 typedef long long ll;
 5 typedef unsigned long long ull;
 6 #define pf printf
 7 #define mem(a,b) memset(a,b,sizeof(a))
 8 #define prime1 1e9+7
 9 #define prime2 1e9+9
10 #define pi 3.14159265
11 #define lson l,mid,rt<<1
12 #define rson mid+1,r,rt<<1|1
13 #define scand(x) scanf("%llf",&x) 
14 #define f(i,a,b) for(int i=a;i<=b;i++)
15 #define scan(a) scanf("%d",&a)
16 #define mp(a,b) make_pair((a),(b))
17 #define P pair<int,int>
18 #define dbg(args) cout<<#args<<":"<<args<<endl;
19 #define inf 0x7ffffff
20 inline int read(){
21     int ans=0,w=1;
22     char ch=getchar();
23     while(!isdigit(ch)){if(ch=='-')w=-1;ch=getchar();}
24     while(isdigit(ch))ans=(ans<<3)+(ans<<1)+ch-'0',ch=getchar();
25     return ans*w;
26 }
27 int n,m,t;
28 const int maxn=1e5+10;
29 const int mod=10;
30 int pow(int n,int k)
31 {
32     int ans=1;
33     n%=10;
34     while(k)
35     {
36         if(k&1)ans=(ans*n)%mod;
37         k>>=1;
38         n=(n*n)%mod;
39     }
40     return ans;
41 }
42 int main()
43 {
44     //freopen("input.txt","r",stdin);
45     //freopen("output.txt","w",stdout);
46     std::ios::sync_with_stdio(false);
47     t=read();
48     while(t--)
49     {
50         n=read();
51         pf("%d
",pow(n,n));
52     }
53 } 

hdu2817:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef unsigned int ui;
 4 typedef long long ll;
 5 typedef unsigned long long ull;
 6 #define pf printf
 7 #define mem(a,b) memset(a,b,sizeof(a))
 8 #define prime1 1e9+7
 9 #define prime2 1e9+9
10 #define pi 3.14159265
11 #define lson l,mid,rt<<1
12 #define rson mid+1,r,rt<<1|1
13 #define scand(x) scanf("%llf",&x) 
14 #define f(i,a,b) for(int i=a;i<=b;i++)
15 #define scan(a) scanf("%d",&a)
16 #define mp(a,b) make_pair((a),(b))
17 #define P pair<int,int>
18 #define dbg(args) cout<<#args<<":"<<args<<endl;
19 #define inf 0x7ffffff
20 inline int read(){
21     int ans=0,w=1;
22     char ch=getchar();
23     while(!isdigit(ch)){if(ch=='-')w=-1;ch=getchar();}
24     while(isdigit(ch))ans=(ans<<3)+(ans<<1)+ch-'0',ch=getchar();
25     return ans*w;
26 }
27 int n,m,t;
28 const int maxn=1e5+10;
29 const ll mod=200907;
30 ll pow(ll n,ll  k)
31 {
32     ll ans=1;
33     while(k)
34     {
35         if(k&1)ans=(ans*n)%mod;
36         k>>=1;
37         n=(n*n)%mod;
38     }
39     return ans;
40 }
41 int main()
42 {
43     //freopen("input.txt","r",stdin);
44     //freopen("output.txt","w",stdout);
45     std::ios::sync_with_stdio(false);
46     t=read();
47     while(t--)
48     {
49         ll a,b,c,d;
50         scanf("%lld%lld%lld%lld",&a,&b,&c,&d);
51         if(2*b==(a+c))
52         {
53             pf("%lld
",(a%mod+(d-1)*(b-a)%mod)%mod);
54         }
55         else 
56         {
57             ll q=b/a;
58             pf("%lld
",(1ll*a*pow(q,d-1))%mod);
59         }
60     }    
61 } 
原文地址:https://www.cnblogs.com/randy-lo/p/12724924.html