浙江大学PAT (Basic Level) Practice (中文)1007素数对猜想JAVA实现代码及分析
2019-03-05 20:52
477 查看
1007
素数对猜想
让我们定义dn为:dn=pn+1−pn,其中pi是第i个素数。显然有d1=1,且对于n>1有dn是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。
现给定任意正整数N(<105),请计算不超过N的满足猜想的素数对的个数。
输入格式:
输入在一行给出正整数N。
输出格式:
在一行中输出不超过N的满足猜想的素数对的个数。
其实这道题的核心是如何去判断一个数是否是质数,但是用普通的暴力计算方法去判断又会面临超时的问题,因为这道题的问题规模有10的5次方,就是十万。所以要采用可以快速判断质数的算法去进行计算。
我这里采用的是先设定一个十万的布尔数组,大于2的奇数设为真,偶数设为假,因为偶数一定不是质数(除去2),然后再用for (int j = 2; j <= Math.sqrt(i); j++)循环对其进行判定
最后再按照题目的要求把相邻且差为2的质数对统计出来就完事了
具体代码实现如下:
import java.util.Scanner; public class Main { static Boolean ZS[]=new Boolean[100001]; public static void main (String[]args) { int N; int number=0; Scanner input=new Scanner(System.in); N=input.nextInt(); calZS(); for(int i=0;i<=N;i++) { if(ZS[i]) { for(int j=i+1;j<=N;j++) { if(ZS[j]) { if((j-i)==2) { number++; } break; } } } } System.out.print(number); } public static void calZS() { ZS[0]=false; ZS[1]=false; ZS[2]=true; for(int i=3;i<100001;i++) { if(i%2==0) { ZS[i]=false; } if(i%2==1) { ZS[i]=true; } } for(int i=0;i<100001;i++) { if(ZS[i]) { for (int j = 2; j <= Math.sqrt(i); j++) { if (i%j == 0) { ZS[i] = false; break; } } } } } }
相关文章推荐
- 浙江大学PAT (Basic Level) Practice (中文)1013数素数JAVA实现代码及分析
- 浙江大学PAT (Basic Level) Practice (中文)1017A除以BJAVA实现代码及分析
- 浙江大学PAT (Basic Level) Practice (中文)1008数组元素循环右移问题JAVA实现代码及分析
- 浙江大学PAT (Basic Level) Practice (中文)1009说反话JAVA实现代码及分析
- 浙江大学PAT (Basic Level) Practice (中文)1014福尔摩斯的约会JAVA实现代码及分析
- 浙江大学PAT (Basic Level) Practice (中文)1012数字分类JAVA实现代码及分析
- 浙江大学PAT (Basic Level) Practice (中文)1011A+B 和 CJAVA实现代码及分析
- 浙江大学PAT (Basic Level) Practice (中文)1010一元多项式求导JAVA实现代码及坑点分析
- 浙江大学PAT (Basic Level) Practice (中文)1016部分A+BJAVA实现代码及分析
- 浙江大学PAT (Basic Level) Practice (中文)1018锤子剪刀布JAVA实现代码及分析
- 浙江大学PAT (Basic Level) Practice (中文)1015德才论JAVA实现代码及分析
- PAT (Basic Level) Practice (中文):1007 素数对猜想(20分)
- PAT (Basic Level) Practise (中文)- 1007. 素数对猜想 (20)
- PAT (Basic Level) Practise (中文)1007. 素数对猜想 (20)
- Pat(Basic Level)Practice--1007(素数对猜想)
- 浙江大学PAT---Basic Level---1007----素数对猜想
- PAT (Basic Level) Practise (中文) 1007素数对猜想 (20)
- PAT (Basic Level) Practise (中文)1007. 素数对猜想 (20)
- PAT (Basic Level) Practise (中文)1007. 素数对猜想 (20) C语言
- PAT乙级真题及训练集 PAT (Basic Level) Practise (中文)1007. 素数对猜想