POJ 2262 哥德巴赫猜想证明与素数筛选

本文介绍了一种高效筛选1至100万范围内素数的方法,并利用该方法解决哥德巴赫猜想中关于偶数表示为两个素数之和的问题。通过去除所有偶数(除2外)及利用素数筛选法,有效减少了计算量。
部署运行你感兴趣的模型镜像

学习筛选1-n内的素数的方法,注意除了2之外的一切素数必然是奇数

此题与哥德巴赫猜想有关。

#include <iostream> #include <cmath> using namespace std; int Array[1000000] = {0}; int main(){ //此题的难点在于如何最高效的在1-1000000内筛选素数,很容易导致超时或者超空间 //从这题要学会素数筛选法 //首先去掉大于2的所有偶数 //cin和cout比printf慢一些,会导致RE for ( int i = 4;i < 1000000;i+=2) { Array[i] = 1; } for (int i = 3;i<sqrt(1000000 + 0.0);i += 2) { if (!Array[i]) { int t = i*i; int T = i; Array[t] = 1;//去掉平方数 while(t < 1000000){ T += 2; t = i*T;//去掉i的所有倍数i+2倍,i+4倍等等 Array[t] = 1; } } } int n; while(scanf("%d",&n),n){ for (int i = 3;i<=n/2;i++) { if(Array[i] == 0 && Array[n-i] == 0) { printf("%d = %d + %d/n",n,i,n-i); break; } } } return 0; }

您可能感兴趣的与本文相关的镜像

Anything-LLM

Anything-LLM

AI应用

AnythingLLM是一个全栈应用程序,可以使用商用或开源的LLM/嵌入器/语义向量数据库模型,帮助用户在本地或云端搭建个性化的聊天机器人系统,且无需复杂设置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值