素数筛法+质因数分解+快速幂
素数筛法
最基础的埃筛
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 }