从零单排PAT1007. 素数对猜想
来源:互联网 发布:java并发线程好书 编辑:程序博客网 时间:2024/04/28 10:45
题目要求:
让我们定义 dn 为:dn = pn+1 - pn,其中 pi 是第i个素数。显然有 d1=1 且对于n>1有 dn 是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。
现给定任意正整数N (< 105),请计算不超过N的满足猜想的素数对的个数。
输入格式:每个测试输入包含1个测试用例,给出正整数N。
输出格式:每个测试用例的输出占一行,不超过N的满足猜想的素数对的个数。
输入样例:20输出样例:
4
代码:
#include <iostream>#include <cmath>#include <vector>using namespace std;//判断素数函数,返回1表示是素数,返回0不是素数int judge_sushu(int num){if(num == 1)return false;else if(num == 2)return true;else{for(int i = 2;i*i<=num;i++) //避免使用开方,除数不允许用0,循环从2开始{if(num%i == 0) //如果能够被整除,说明不是素数{return false;}}return true;}}int main(){int n;int count = 0; //用于计数int pre_i = -2;cin >> n;for(int i = 1;i<=n;i++) //可自动+2进行优化{if(true == judge_sushu(i)){if(2 == i - pre_i){count ++;}pre_i =i; //刷新赋值}}cout << count <<endl;system("pause");return 0;}/**/
一开始就做出了结果,但是一直没有通过,很困惑,逻辑肯定没有错,那就是边界条件出了问题。
边界一个是2,3开始,其实1是不需要进行判断,除数也只需要从2开始(用1那就悲剧了)。
判断素数最常见的方法是从1遍历到它本身,但是由于对称性,所以我们只需要遍历到这个数的开方就可以。
判断素数的算法不止这点,以后的博文会写出,让我们回到这道题目。
我错误是因为边界出了问题,一是2的判断,二是最大的数判断,因为我常用遍历数组的方式for(i=0;i<n;i++),所以,这样只能遍历到n-1,所以需要遍历到n就必须改成for(i=0;i<n+1;i++)。
虽然这是一个很简单的小问题,但是说明我的逻辑还不够严谨,尤其对于边界条件没有考虑清楚。这是我必须努力提升的地方。
0 0
- 从零单排PAT1007. 素数对猜想
- PAT1007. 素数对猜想
- PAT1007. 素数对猜想
- pat1007:素数对猜想
- PAT1007 素数对猜想
- PAT1007 素数对猜想(20)
- pat1007.素数对猜想(20)
- PAT1007. 素数对猜想 (20)
- PAT1007. 素数对猜想 (20)
- PAT1007 BASIC:素数对猜想 (20)
- 从零单排PAT1005. 继续(3n+1)猜想
- 从零单排1
- 从零单排2
- 从零单排3
- 从零单排4
- 从零单排5
- 从零单排6
- 从零单排7
- 链表
- codeforce 5B Center Alignment
- 解决宿主机不能访问虚拟机CentOS中的站点
- 四川外国语大学IFC国际本科预科招生简章
- UVa 401 - Palindromes
- 从零单排PAT1007. 素数对猜想
- IIS网站服务器性能优化攻略
- Algorithms(字典树)
- id 声明的对象有什么特性?
- mybatis学习-入门(6)-实际例子,输入用户注册,并在离开用户名输入框时检查用户是否存在
- linux下非root用户如何修改root权限的文件
- 今天开通博客了,写一写我在软件开发和学习中的经历。
- g++与gcc及cc区别
- Nginx做前端,Apache做后端的配置实例