1007 素数对猜想 (20 分)
让我们定义dn为:dn=pn+1−pn,其中pi是第i个素数。显然有d1=1,且对于n>1有dn是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。
现给定任意正整数N
(<10^5),请计算不超过N
的满足猜想的素数对的个数。
输入格式:
输入在一行给出正整数N
。
输出格式:
在一行中输出不超过N
的满足猜想的素数对的个数。
输入样例:
20
输出样例:
4
思路:
看完这道题思路倒是有了
但是马上就有了一个直击心灵的问题摆在眼前
……素数的算法是什么来着??????
emm…
想法很简单,毕竟有N<10^5
弄两个数组,一个放所有<10^5的素数
一个差值等于2的素数集合
然后根据num的大小输出个数即可
AD补救:
① 啥是素数?
约数只有1和本身的整数称为质数,或称素数。
② 咋判断素数?
一个数若可以进行因数分解,那么分解时得到的两个数一定是一个小于等于sqrt(n),一个大于等于sqrt(n)
https://blog.csdn.net/huang_miao_xin/article/details/51331710
尝试AC
(一)
using namespace std;
#include<iostream>
//#include<algorithm>
#include<cmath>
int main() {
int N;
cin>>N;
int i(0), j(0);
// D-value condition
int pre(2);
int sum(0);
if(N>0 && N<100000){
for(i=3; i<N; i++) {
for(j=2; j<=sqrt(i); j++)
//{
if(i%j==0)
break;
//}
if(j>sqrt(i)) {
if(i-pre==2)
sum++;
pre=i;
}
}cout<< sum<<endl;
} return 0;
}
有一个测试点没过,少两分。
(二)
发现是循环条件里 line 16 没有取到等号
using namespace std;
#include<iostream>
//#include<algorithm>
#include<cmath>
int main() {
int N;
cin>>N;
int i(0), j(0);
// D-value condition
int pre(2);
int sum(0);
if(N>0 && N<100000){
for(i=3; i<=N; i++) {
for(j=2; j<=sqrt(i); j++)
//{
if(i%j==0)
break;
//}
if(j>sqrt(i)) {
if(i-pre==2)
sum++;
pre=i;
}
}cout<< sum<<endl;
} return 0;
}
总结:
① 还是粗心诶
② 基础知识居然忘了…我可真是……