数论-质数-Goldbach's Conjecture

水题。

#include<bits/stdc++.h>
#define rep(i,l,r) for(int i=(l);i<=(r);i++)
#define per(i,r,l) for(int i=(r);i>=(l);i--)
#define random(l,r) ((l)+rand()%((r)-(l)+1))
using namespace std;
typedef unsigned long long ull;
typedef long long ll;
const int inf=1e9+10,N=1e6+100;
inline int read(){
	register int sign=0,v=0; register char c;
	while(!isdigit(c=getchar())) if(c=='-') break;
	if(c=='-') sign=1; else v=c-48;
	while(isdigit(c=getchar())) v=v*10+c-48;
	if(sign==0) return v; else return -v;
}
int n,v[N],prime[N],len;
void Euler(){
	rep(i,2,N){
		if(v[i]==0){
			prime[++len]=i;
			v[i]=i;
		}
		rep(j,1,len){
			if((prime[j]>v[i])||(prime[j]*i>N)) break;
			v[i*prime[j]]=prime[j];
		}
	}
}
int main(){
	Euler();
	while(n=read()){
		rep(i,1,len) if(v[n-prime[i]]==n-prime[i]){
			printf("%d = %d + %d\n",n,prime[i],n-prime[i]);
			break;
		}
	}
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值