2021.08.13 素数
练习题:
P2092 数字游戏 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
typedef long long ll;
ll n,ans;
queue<ll>q;
inline ll read(){
ll s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')w=-1;
ch=getchar();
}
while(ch<='9'&&ch>='0'){
s=s*10+ch-'0';
ch=getchar();
}
return s*w;
}
int main(){
n=read();
for(ll i=2;i*i<=n;i++){
while(n%i==0)q.push(i),n/=i;
}
if(n!=1)q.push(n);
if(q.size()==2)cout<<"2";
else if(q.size()==1)cout<<"1"<<endl<<"0";
else{
cout<<"1"<<endl;
ll x=q.front();q.pop();
cout<<x*q.front();
}
return 0;
}
UVA10140 Prime Distance - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
注:欧拉筛模板
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=1e7+10;
int l,r,top,prime[N],isprime[50010],vis[N],a[N],maxn,minn,start1,start2,endi1,endi2;
inline int read(){
int s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')w=-1;
ch=getchar();
}
while(ch<='9'&&ch>='0'){
s=s*10+ch-'0';
ch=getchar();
}
return s*w;
}
inline void oula(int x){
memset(isprime,1,sizeof(isprime));
isprime[0]=isprime[1]=0;
for(int i=2;i<=x;i++){
if(isprime[i])prime[++top]=i;
for(int j=1;j<=top&&prime[j]*i<=x;j++){
isprime[prime[j]*i]=0;
if(i%prime[j]==0)break;
}
}
}
int main(){
oula(50010);
while(~scanf("%d%d",&l,&r)){
memset(vis,0,sizeof(vis));
if(l<2)l=2;
for(int i=1;i<=top;i++)
for(int j=l/prime[i];j<=r/prime[i];j++){
//cout<<j<<" ";//
while(j<=1)++j;
if(prime[i]*j<l)continue;
if(prime[i]*j>r)continue;
vis[prime[i]*j-l]=1;
}
//cout<<endl;
//for(int i=l;i<=r;i++)cout<<vis[i-l]<<" ";cout<<endl;
int cnt=0;
for(int i=0;i<=r-l;i++)if(!vis[i])a[++cnt]=i;//,cout<<i<<" ";cout<<endl;
maxn=-0x3f3f3f3f,minn=0x3f3f3f3f;
if(cnt<=1){
puts("There are no adjacent primes.");
continue;
}
for(int i=2;i<=cnt;i++){
if(maxn<a[i]-a[i-1])maxn=a[i]-a[i-1],start1=a[i-1]+l,endi1=a[i]+l;
if(minn>a[i]-a[i-1])minn=a[i]-a[i-1],start2=a[i-1]+l,endi2=a[i]+l;
}
printf("%d,%d are closest, %d,%d are most distant.\n",start2,endi2,start1,endi1);
}
return 0;
}