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

素数筛法

最基础的埃筛

 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 }

 

转载于:https://www.cnblogs.com/lhsghhqgmzy/p/10772055.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值