素数筛法+质因数分解+快速幂

素数筛法

最基础的埃筛

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int M=1e5+10;
 4 int p[M],ch[M];
 5 void init() {
 6 
 7     int num=1;
 8     memset(ch,0,sizeof(ch));
 9     for(int i=2; i<=M; i++) {
10         if(ch[i]==0)
11         {    p[num++]=i;
12         for(int j=i;j<=M;j=j+i)
13         {
14         ch[j]=1;
15         }
16         }
17     }
18 }
19 int main() {
20 init();
21 for(int i=1;i<=100;i++)
22     cout<<p[i]<<endl;
23 
24 }

 

 

记一个欧拉筛法吧。

 
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int M=1e5+10;
 4 int p[M],ch[M];
 5 void init() {
 6 
 7     int num=1;
 8     memset(ch,0,sizeof(ch));
 9     for(int i=2; i<=M; i++) {
10     if(ch[i]==0)p[num++]=i;
11     for(int j=1;j<num&&i*p[j]<=M;j++)
12     {
13     ch[i*p[j]]=1;
14     if(i%p[j]==0)break;
15     }
16     }
17 }
18 int main() {
19 init();
20 for(int i=1;i<=100;i++)
21     cout<<p[i]<<endl;
22 
23 }

 然后是质因数分解

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 
 4 const int M=1000;
 5 int a[M],b[M];
 6 void factor(int n) {
 7     int num=1;
 8     int temp=int(double(sqrt(n))+1);
 9     for(int i=2; i<=temp; i++) {
10         if(n%i==0) {
11             a[num++]=i;
12             while(n%i==0) {
13                 b[num-1]++;
14                 n/=i;
15             }
16         }
17 
18     }
19     if(n!=1)
20     {
21         a[num]=n;
22         b[num]=1;
23     }
24 }
25 
26 
27 
28 int main()
29 {
30 factor(132);
31 for(int i=1;i<=10;i++)
32     printf("%d ",a[i]);
33     cout<<endl;
34 for(int i=1;i<=10;i++)
35     printf("%d ",b[i]);
36 }

 快速幂

 1 long long quick_pow(long long a,long long b,long long mod) {
 2 
 3     long long ans=1;
 4     while(b) {
 5         if(b&1)
 6             ans*=a%mod;
 7         a*=a%mod;
 8         b>>1;
 9     }
10 
11 }

 

posted @ 2019-04-26 00:44  Fi  阅读(388)  评论(0编辑  收藏  举报