首页 > 其他 > 详细

大数运算

时间:2019-11-07 01:05:20      阅读:87      评论:0      收藏:0      [点我收藏+]

先贴代码  以后解释

    处理2^n (n比较大)

 1 #include<bits/stdc++.h>
 2 char s[1000005];
 3 char st[1000005];
 4 long long qpow(long long a,long long b,long long mod)
 5 {
 6     long long  ans=1,temp=a;
 7     while(b)
 8     {
 9         if(b&1)
10         {
11             ans=(ans*temp)%mod;
12         }
13         b>>=1;
14         temp=temp*temp%mod;
15     }
16     return ans;
17 }
18 const int MAXN=1e5;
19 int  vis[MAXN],prime[MAXN];
20 int main()
21 {
22     long long i,j,n,euler,c,a,top;
23     top=0;
24     for (i=2; i<MAXN; i++)
25     {
26         if (!vis[i])
27         {
28             prime[top++]=i;
29         }
30         for(j=0; prime[j]*i<MAXN; j++)
31         {
32             vis[prime[j]*i]=1;
33             if(i%prime[j]==0)
34                 break;
35         }
36     }
37     while(scanf("%s",&s)!=EOF)
38     {
39         a = 2;///底数
40         n = 998244353;
41         euler=n;
42         c=n;
43         for(i=0; (long long)prime[i]*prime[i]<=n; i++)
44         {
45             if(n%prime[i]==0)
46             {
47                 euler=euler*(prime[i]-1)/prime[i];
48                 while(n%prime[i]==0)
49                 {
50                     n/=prime[i];
51                 }
52             }
53         }
54         if(n!=1)
55         {
56             euler=euler/n*(n-1);
57         }
58         long long b=0;
59         for(i=0; s[i]; i++)
60         {
61             b=(b*10+s[i]-0)%euler;
62         }
63         printf("%d\n",qpow(a,b+euler,c));
64     }
65     return 0;
66 }

 

大数运算

原文:https://www.cnblogs.com/ashen137/p/10345645.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!