C++ ! 孪生素数 !
所谓孪生素数指的是间隔为2的相邻的素数,他们之间的距离已经近得不能再近了,就像孪生兄弟一样,最小的孪生素数是(3,5),在100以内还有(5,7),(11,13),(17,19),(17,19),(29,31),(41,43),(59,61),(71,73),总计8组。
但随着数字的增大,孪生素数的分布越来越稀疏,寻找起来也变得困难,那会不会在超过某个界限之后就再也没有孪生素数了呢?
孪生素数有无穷多个!这个猜想称为孪生素数猜想,但至今没有被严格证明,但借助计算机我们已经确实可以找到了任意大范围内的所有孪生素数对。
接下来你的任务就是计算不大于n的范围内的孪生素数对的个数!
# include<iostream>
# include<vector>
# include<cmath>using namespace std;
// ********************************
// 定义孪生素数结构体
// ********************************
struct LsPrime {int lPrime;int rPrime;LsPrime(int l, int r){lPrime = l;rPrime = r;}
};
vector<LsPrime> g_lsPrimeVec; // 孪生素数表
vector<int> g_primeVector = {2, 3, 5, 7, 11}; // 素数表
bool IsPrime(int n)
{for (auto prime : g_primeVector){if (n == prime) {return true;}if (n % prime == 0) {return false;}if (prime > sqrt(n)) {return true;}}for (int num = g_primeVector.back() + 1; num <= sqrt(n); num++){if (IsPrime(num)) {g_primeVector.push_back(num);}if (n % num == 0) {return false;}}return true;
}// ********************************
// 更新孪生素数表
// ********************************
bool UpdateLsPrimeVec(int maxN)
{int startVar = 2;// 不需要更新if (!g_lsPrimeVec.empty()){if (g_lsPrimeVec.back().rPrime > maxN) {return false;} else {startVar = g_lsPrimeVec.back().rPrime;}}// 更新孪生素数表for (int var = startVar; var <= maxN - 2; var ++ ){if (IsPrime(var) && IsPrime(var + 2)) {g_lsPrimeVec.push_back(LsPrime(var, var + 2));}}return true;
}int GetLsPrimeNum(int maxN)
{if (UpdateLsPrimeVec(maxN)){return g_lsPrimeVec.size();} else {for (int LsPrimeNum = 0; LsPrimeNum < g_lsPrimeVec.size(); LsPrimeNum ++ ){if (g_lsPrimeVec[LsPrimeNum].rPrime > maxN) {return LsPrimeNum;}}}
}int main() {int maxN;while (cin>>maxN){cout << GetLsPrimeNum(maxN) << ::endl;}return 0;
}
C++ ! 孪生素数 !相关推荐
- 论防止爆T的重要性:N相关孪生素数
N相关孪生素数 Time Limit: 1 Sec Memory Limit: 128 MB 64bit IO Format: %lld Description 如果A和B都是素数,而且A和B相 ...
- 寻找孪生素数(当p为素数时,p+2也为素数)
数学家希尔伯特在1900年国际数学家大会的报告上提出一个"孪生素数猜想",即: 存在无穷多个素数p,使得p + 2是素数.p和p+2这一对差为2的素数,被称为"孪生素数& ...
- 孪生素数 java代码_科学网—孪生素数猜想——利用 Java + 正则表达式 输出孪生素数对 - 马廷灿的博文...
查了一下资料,发现正则表达式竟然可以用来检查素数(http://coolshell.cn/articles/2704.html)!(由于工作需要,几年前开始接触.利用正则表达式,给工作带了很大方便,也 ...
- 积分上下限无穷_数学方法的思考和存在无穷多个孪生素数证明的思路
高斯提出了素数定理, 但是没有证明,一百年后数学家雅克·阿达马与德拉瓦·莱普森,分别独立证 明了素数定理.他们用的是复分析及黎曼函数.此时大数学家哈代就指出" 对不起,素数定理没有初等证明& ...
- java输出孪生素数对数_最大的孪生素数证明
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 本文证明的方法是将奇数从小到大划分成若干个阶段,每个阶段的起始数是一个奇数的完全平方数.从2到7共 4个奇数为第一阶段.当然素数2不是奇数也不是完全平方数 ...
- JAVA——孪生素数
若两个素数之差为2,则称其为孪生素数 package 孪生素数;public class 孪生素数 {public static void main(String[] args){int i,j;in ...
- 判断素数的方法(孪生素数)
素数:(质数prime number)定义为在大于1的自然数中,除了1和它本身以外不再有其他因数,素数有无穷多个. 先来一张 2-200素数分布表 传统判断素数方法 1.开根号法 从2到√n整除判断 ...
- 相差为2的两个素数称为孪生素数
相差为2的两个素数称为孪生素数.例如,3与5,41与43等都是孪生素数.设计程序求出指定区间上的所有孪生素数对.区间上限和下限由键盘获取. 要求:判断一个数是否为素数必须定义函数实现. 提示:在主函数 ...
- 孪生素数—(相差2的素数对)
孪生素数就是指相差2的素数对,例如3和5,5和7,11和13-,已经证明孪生素数存在无穷多对. 编程输入正整数a(10000>=a>=2),输出不小于a的第一对孪生素数.差是2的两个素数被 ...
- 华人数学家破译孪生素数猜想 影响或超1+2证明
2013年05月18日02:59 中国青年报 我有话说(1472人参与) 张益唐近照,由新罕布什尔大学提供 张益唐是个对数字"极其敏感"的人,他能把大学同班同学的出生日期背得&q ...
最新文章
- redis3.2的安装和使用
- vue动画效果配置和弹层css sticky footer
- 怎么实现两周联动加减速_行车记录仪种类繁多不知道怎么选?学会这几招,简单又有效...
- eslint配置及rule解释
- 英特尔公司面向 Android 软件开发套件(SDK)4.3 的 x86 Android* 系统映像的内部评估许可协议...
- windows与linux线程,Linux和Windows两种风格的操作系统,创建线程的方式有何不同?...
- 高级PPT动画制作示例
- python进行主成分分析_python 主成分分析
- USGS SWB模型
- java游戏魔界村_魔界村(附秘籍)游戏下载-魔界村游戏最新版v2.0-爱单机
- 不仅会编程还要会英语(博主英语小笔记)1.1名词
- 新概念英语第一册单词
- Laravel企业信息化管理平台
- 群、环、域的概念总结
- 网页策略游戏《绝地战争》完整源码下载
- 简单的Bat文件延迟启动特定程序
- 物理复习2振动、波动
- 乒乓球 牛客 NTT
- APM应用性能管理工具Pinpoint测评
- 关于Android上进行分区的问题