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;
}
 posted on 2021-11-03 16:19  eleveni  阅读(40)  评论(0)    收藏  举报