让我们定义dn为:dn=pn+1−pn,其中pi是第i个素数。显然有d1=1,且对于n>1有dn是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。
现给定任意正整数N
(<105),请计算不超过N
的满足猜想的素数对的个数。
输入格式:
输入在一行给出正整数N
。
输出格式:
在一行中输出不超过N
的满足猜想的素数对的个数。
输入样例:
20
结尾无空行
输出样例:
4
结尾无空行
以上是我的代码,没有得全分数,最后一个超时了,下面是我运行100000的界面。
相对来说,这个题比较简单,这个题主要的点是在如何简化程序、简化到什么程度。比如在下面代码中把nums++直接放在prime[]里,既满足了下标的需要,也起到了自加的作用。
我的代码水平一般,放在这里只是为了交流,如果哪里做得不好,欢迎各位指出,感谢!
#include<iostream> //程序比较简单,就没有过多的注释
using namespace std;
class count
{
public:
int N,nums,n; //nums是用来计数素数的
int prime[10000]; //储存找到的素数
count()
{
cin>>N;
nums=0;
n=0;
}
void Lookfor() //查找出1到N所有的素数
{
for(int i=1;i<=N;i++)
{
for(int j=1;j<=i;j++)
{
if(j!=1&&j!=i&&i%j==0) break;
else if(j==i||i==1)
{
prime[nums++]=i;
}
}
}
}
void check()
{
for(int i=0;i<nums;i++)
{
if(prime[i+1]-prime[i]==2) n++;
}
cout<<n<<endl;
}
};
int main()
{
count a1;
a1.Lookfor();
a1.check();
return 0;
}