1007. 素数对猜想 (20)
2017-09-19 22:19
330 查看
题目链接
题目:
让我们定义 dn 为:dn = pn+1 - pn,其中 pi 是第i个素数。显然有 d1=1 且对于n>1有 dn 是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。
现给定任意正整数N (< 105),请计算不超过N的满足猜想的素数对的个数。
输入格式:每个测试输入包含1个测试用例,给出正整数N。
输出格式:每个测试用例的输出占一行,不超过N的满足猜想的素数对的个数。
输入样例:
输出样例:
题解:
简单的判断素数。
做这个题的过程中,在第11行用到了位运算判断奇偶,开始写的是if( n & 1 == 0 ),会出现错误,原来是符号优先级的问题,==要比&优先级高。
附上优先级表:
代码:
#include <cstdio>
#include <cmath>
using namespace std;
int isPrime(int n)
{
if(n == 0 || n == 1)
return 0;
if(n == 2 || n == 3)
return 1;
if((n & 1) == 0)
return 0;
int sqt = (int)sqrt(n) + 1;
for(int i = 3; i < sqt; i += 2)
{
if(n % i == 0)
return 0;
}
return 1;
}
int main()
{
int n, cnt = 0;
scanf("%d", &n);
for(int i = 1; i < n; i++)
{
if(isPrime(i) && isPrime(i + 2) && (i + 2) <= n)
cnt++;
}
printf("%d", cnt);
return 0;
}
题目:
让我们定义 dn 为:dn = pn+1 - pn,其中 pi 是第i个素数。显然有 d1=1 且对于n>1有 dn 是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。
现给定任意正整数N (< 105),请计算不超过N的满足猜想的素数对的个数。
输入格式:每个测试输入包含1个测试用例,给出正整数N。
输出格式:每个测试用例的输出占一行,不超过N的满足猜想的素数对的个数。
输入样例:
20
输出样例:
4
题解:
简单的判断素数。
做这个题的过程中,在第11行用到了位运算判断奇偶,开始写的是if( n & 1 == 0 ),会出现错误,原来是符号优先级的问题,==要比&优先级高。
附上优先级表:
优先级 | 操作符 | 描述 | 结合性 |
---|---|---|---|
1 | :: | 作用域解析 | 从左到右 |
2 | ++ -- | 后缀 自增、自减 | |
() | 函数调用 | ||
[] | 数组下标 | ||
. | 通过引用选择成员 | ||
−> | 通过指针选择成员 | ||
3 | ++ -- | 前缀 自增、自减 | 从右到左 |
+ − | 正、负 | ||
! ~ | 逻辑非、按位非 | ||
(type) | 4000 显式类型转换 | ||
* | 解引用 | ||
& | 取地址 | ||
sizeof | 取对象大小 | ||
new, new[] | 动态内存分配 | ||
delete, delete[] | 动态内存去分配 | ||
4 | .* ->* | 成员指针运算符 | 从左到右 |
5 | * / % | 乘、除、求余 | |
6 | + − | 加、减 | |
7 | << >> | 按位左移、按位右移 | |
8 | < <= | 小于、小于或等于 | |
> >= | 大于、大于或等于 | ||
9 | == != | 等于、不等于 | |
10 | & | 按位与 | |
11 | ^ | 按位异或 | |
12 | | | 按位或 | |
13 | && | 逻辑与 | |
14 | || | 逻辑或 | |
15 | ?: | 三目运算符 | 从右到左 |
= | 赋值 | ||
+= −= | 加法/减法赋值运算符 | ||
*= /= %= | 乘法/除法/取余赋值运算符 | ||
<<= >>= | 按位左移/右移赋值运算符 | ||
&= ^= |= | 按位与/异或/或赋值运算符 | ||
throw | 抛出异常 | ||
16 | , | 逗号 | 从左到右 |
#include <cstdio>
#include <cmath>
using namespace std;
int isPrime(int n)
{
if(n == 0 || n == 1)
return 0;
if(n == 2 || n == 3)
return 1;
if((n & 1) == 0)
return 0;
int sqt = (int)sqrt(n) + 1;
for(int i = 3; i < sqt; i += 2)
{
if(n % i == 0)
return 0;
}
return 1;
}
int main()
{
int n, cnt = 0;
scanf("%d", &n);
for(int i = 1; i < n; i++)
{
if(isPrime(i) && isPrime(i + 2) && (i + 2) <= n)
cnt++;
}
printf("%d", cnt);
return 0;
}
相关文章推荐
- PAT 1007. 素数对猜想 (20) vector
- PAT(B)1007. 素数对猜想 (20)
- 1007. 素数对猜想 (20) JAVA
- 1007. 素数对猜想 (20)
- [PAT乙] 1007. 素数对猜想 (20)
- PAT 1007. 素数对猜想 (20) JAVA
- 1007. 素数对猜想 (20)
- 1007. 素数对猜想 (20)
- 1007. 素数对猜想 (20)
- 1007. 素数对猜想 (20)
- PAT 1007. 素数对猜想 (20)
- 1007. 素数对猜想 (20)
- 1007. 素数对猜想 (20)
- 1007. 素数对猜想 (20)(C++)
- 1007. 素数对猜想 (20)
- PAT 乙级练习题1007. 素数对猜想 (20)
- 1007. 素数对猜想 (20)
- 1007. 素数对猜想 (20)
- PAT乙级 1007. 素数对猜想 (20)
- 1007. 素数对猜想 (20)