让我们定义dn为:dn=pn+1−pn,其中pi是第i个素数。显然有d1=1,且对于n>1有dn是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。
现给定任意正整数N
(<105),请计算不超过N
的满足猜想的素数对的个数。
输入格式:
输入在一行给出正整数N
。
输出格式:
在一行中输出不超过N
的满足猜想的素数对的个数。
输入样例:
20
输出样例:
4
分析:简单题
注意pi 是第i个素数,所以我们要先找到n个素数,然后进行判断
代码如下:
#include<stdio.h>
#include<math.h>
int isprime(int i)
{
if (i == 1)
{
return 0;
}
else if (i == 2)
{
return 1;
}
int j = 2;
for (; j < i; j++)
{
if (i % j == 0)
{
return 0;
}
}
return 1;
}
int main()
{
int num, i, j;
scanf("%d", &num);
int prime[100000] = { 0 };//用与存素数
int keynum = 0;//素数对的个数
for (i = 1, j = 0; i <= num; i++)
{
if (isprime(i) == 1)
{
prime[j] = i;
j++;
}
}
for (i = 0, j--; i < j; i++)
{
if (prime[i + 1] - prime[i] == 2)//符合条件的素数对
{
keynum++;
}
}
printf("%d", keynum);
return 0;
}
如果这样写出来,会有一个是运行超时 ,这是判断素数的函数出来问题
对函数进行优化
int isprime(int i)
{
if (i == 1)
{
return 0;
}
else if (i == 2)
{
return 1;
}
int j = 2;
for (; j < sqrt(i) + 1; j++)
{
if (i % j == 0)
{
return 0;
}
}
return 1;
}
以后写代码最好还是直接用优化后滴