您的位置:首页 > 其它

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的满足猜想的素数对的个数。
输入样例:
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: