PAT乙级(Basic)题库---1007
来源:互联网 发布:centos git 编译 编辑:程序博客网 时间:2024/05/17 02:59
题目
1007-素数对猜想
解题思路
根据输入的数,遍历判断小于它的奇数n是否为素数,若n为素数,判断n-2是否是素数,若是则计数加一,最后输出素数对个数。由于唯一的偶素数2不会组成素数对,不用特殊考虑。所以这题重点在于素数的判断。
素数的判断
众所周知,一个数除它本身和一以外没有其他约数则称其为素数(或质数),因此最简单直接的方法就是遍历除一外小于它的数,看是否能被其整除。一种改进是遍历除一外小于它的奇数以及二,看是否能被其整除。另一种改进是遍历除一外小于a的奇数以及二,看是否能被整除,其中a*a是小于等于该数的最大平方数。
第一种改进好理解,我们来解读下第二种改进。一个数x,如果它不是素数,则能表示成x=n*m,其中n小于等于m,由于a*a是小于等于x的最大平方数,因此n*n小于等于a*a。所以一个数如果不是素数,一定能在小于等于a的范围内找到它的约数n。反之如果在此范围内找不到它的约数,则该数为素数。
代码
#include<iostream>#include<algorithm>#include<string.h>#include<cmath>using namespace std;//判断是否是素数bool isPrime(int num){ if(num==2) { return true; } else if(num==1||num%2==0) { return false; } else { //遍历小于等于a的奇数,是否能被整除,其中a=sqrt(num) for(int i=3;i<=sqrt(num);i+=2) { if(num%i==0) { return false; } } return true; }}int main(){ int n,sum; while(cin>>n) { //sum记录素数对的个数 sum=0; //得到小于n的最大奇数 if(n%2==0) { n=n-1; } for(int i=n;i>2;i-=2) { //判断是否是素数对 if(isPrime(i)) { if(isPrime(i-2)) { sum++; } } } cout<<sum<<"\n"; }}
阅读全文
0 0
- PAT乙级(Basic)题库---1007
- PAT乙级(Basic)题库---1001
- PAT乙级(Basic)题库---1002
- PAT乙级(Basic)题库---1003
- PAT乙级(Basic)题库---1004
- PAT乙级(Basic)题库---1005
- PAT乙级(Basic)题库---1006
- PAT乙级(Basic)题库---1008
- PAT乙级(Basic)题库---1009
- PAT乙级(Basic Level)1009(Java)
- PAT乙级(Basic Level)1021(Java)
- PAT乙级(Basic Level)1046(Java)
- PAT乙级(Basic Level)1042(Java)
- PAT乙级(Basic Level)1001(Java)
- PAT乙级(Basic Leve)1043(C++)
- PAT乙级(Basic Level)1041(C++)
- PAT乙级(Basic Level)1047(C++)
- PAT乙级(Basic Level)1027(C++)
- 决策树——python(机器学习实战)
- burpsuite学习——扫描漏洞
- java程序员的python之路(异常)
- 惟伊(成都)日用品有限公司揭牌仪式圆满落幕
- 单级与多级放大器比较
- PAT乙级(Basic)题库---1007
- oracle hint
- socket网络编程基础(乒乓球原理)
- vue中遇到的坑 --- 变化检测问题(数组相关)
- angularjs 路由
- Qt 5.7.1/5.8.0/5.9.0 在 msvc2015/mingw32 方式下的静态编译过程
- spring常用注解
- 剑指offer 48---设计一个类不能被继承
- GitHub Pages 中文简介