每日一题--PAT乙级1007
作者:互联网
1007 素数对猜想 (20 分)
让我们定义dn为:,其中是第 i 个素数。显然有 =1,且对于n>1有是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。
现给定任意正整数
N
(<10^5),请计算不超过N
的满足猜想的素数对的个数。
输入格式:
输入在一行给出正整数N
。
输出格式:
在一行中输出不超过N
的满足猜想的素数对的个数。
输入样例:
20
结尾无空行!
输出样例:
4
结尾无空行!
#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable:6031)
#include<stdio.h>
#include<math.h>
int main()
{
int n;
scanf("%d", &n);
int count = 0; // 计数(满足猜想的素数对的个数)
int last = 1; // 保存上一个素数,这里默认保存了第一个素数1
for (int i = 2; i <= n; i++) {
if (i == 2) {
last = i; // 如果是2,就直接替换掉1,因为2-1 != 2
continue; // 返回循环
}
if (i % 2 == 0) // 如果是偶数,则返回循环
continue;
int j;
// 一个正整数一定可以由两个数字相乘得到,而且这两个数字
// 一个大于等于该正整数的平方根,一个小于等于该正整数的平方根
// 因此只需对小于等于平方根的数取余即可
for (j = 3; j <= (int)sqrt(i); j++) {
if (i % j == 0)
break;
}
// 如果上面的循环是由break跳出的,则一定j有 j <= (int)sqrt(i);
// 正常循环完的话,j==(int)sqrt(i)+1;
if (j < (int)sqrt(i) + 1)
continue;
else
if (i - last == 2) // 判断当前的素数与上一个素数的差是否为2
count++;
last = i; // 修改上一个素数
}
printf("%d", count);
return 0;
}
标签:PAT,猜想,--,个数,int,素数,1007,20,include 来源: https://blog.csdn.net/weixin_50086997/article/details/120573683