1.试除法判定质数
https://www.acwing.com/problem/content/868/
#include<iostream>
using namespace std;
int p(int a)
{
if(a<2) return 1;
for(int i=2;i<=a/i;i++)
{
if(a%i==0) return 1;
}
return 0;
}
int main()
{
int n;
cin>>n;
while(n--)
{
int x;
cin>>x;
if(p(x)==1) cout<<"No";
else cout<<"Yes";
cout<<endl;
}
return 0;
}
2.分解质因数
https://www.acwing.com/problem/content/869/
#include<iostream>
using namespace std;
int p(int a)
{
for(int i=2;i<=a/i;i++)
{
int num=0;
if(a%i==0)
{
while(a%i==0)
{
num++;
a/=i;
}
cout<<i<<" "<<num<<endl;
}
}
if(a>1) cout<<a<<" "<<1<<endl;
return 0;
}
int main()
{
int n;
cin>>n;
while(n--)
{
int x;
cin>>x;
p(x);
cout<<endl;
}
return 0;
}
3.筛质数*
https://www.acwing.com/problem/content/870/
//埃氏筛
#include<iostream>
#include<cstring>
using namespace std;
const int N=1000010;
bool pri[N];
//埃氏筛
int p(int a)
{
memset(pri,1,sizeof pri);
int cnt=0;
for(int i=2;i<=a;i++)
{
if(pri[i])
{
for(int j=2*i;j<=a;j+=i)
{
pri[j]=0;
}
}
if(pri[i]) cnt++;
}
return cnt;
}
int main()
{
int n;
cin>>n;
cout<<p(n);
return 0;
}
//线性筛
#include<iostream>
using namespace std;
const int N=1000100;
bool vis[N];
int pr[N];
int p(int a)
{
int cnt=0;
for(int i=2;i<=a;i++)
{
if(vis[i]==0) pr[++cnt]=i;
for(int j=1;i*pr[j]<=a;j++)
{
vis[pr[j]*i]=1;
//每个合数必有一个最小素因子
if(i%pr[j]==0) break;
}
}
return cnt;
}
int main()
{
int n;
cin>>n;
cout<<p(n);
return 0;
}
https://ac.nowcoder.com/acm/contest/9982/I
牛牛的“质因数”
/*再将某个数进行分解的时候,
要么它是质数,-》 它本身 与 1
要么 两个比他小的数 这里我们使用数组储存 这样就会节省大量的时间
*/
#include<iostream>
using namespace std;
typedef long long ll;
const int N=4000006;
const int mod=1e9+7;
ll f[N];
int len(int n)
{
int ans=1;
while(n)
{
n/=10;
ans*=10;
}
return ans;
}
int main()
{
int n;
cin>>n;
for(int i=2;i<=n;i++)
{
if(f[i]==0)
{
f[i]=i;
for(int j=2*i;j<=n;j+=i)
{
f[j]=(f[j/i]*len(i)+i)%mod;
}
}
}
int sum=0;
for(int i=2;i<=n;i++)
sum=(sum+f[i])%mod;
cout<<sum;
return 0;
}