链接:
http://acm.nyist.net/JudgeOnline/problem.php?pid=26
这也是一种提高效率的方法,将总的数目都先打印出来(只适用于多个循环)。
这也是一种提高效率的方法,将总的数目都先打印出来(只适用于多个循环)。
代码:
查看代码---运行号:733570----结果:Accepted
运行时间:
2014-02-26 11:44:29 | 运行人:
shengweisong
01.
#include<stdio.h>
02.
#include<math.h>
03.
//#include<stdlib.h>
04.
int
a[1000005];
05.
int
f(
int
n )
06.
{
07.
int
i;
08.
if
( n < 2 )
09.
return
0;
10.
else
11.
{
12.
for
( i = 2; i <=
sqrt
(n); i ++ )
13.
if
( n %i == 0 )
14.
return
0;
15.
return
1;
16.
}
17.
}
18.
int
main()
19.
{
20.
int
i, n, j;
21.
for
( i = 2, j = 0; i < 1000005; i ++ )
//放在这比放在循环中更快!!
22.
{
23.
if
( f(i) )
24.
{
25.
a[j] = i;
26.
j ++;
27.
}
28.
}
29.
scanf
(
"%d"
, &n );
30.
while
( n -- )
31.
{
32.
int
m, s=0;
33.
scanf
(
"%d"
, &m );
34.
if
( m < 2 )
35.
{
36.
printf
(
"0\n"
);
37.
continue
;
38.
}
39.
for
( i = 1; a[i] <= m; i ++ )
//这行需注意是a[i] <= m
40.
{
41.
if
( (a[i] - a[i-1] == 1)||( a[i] - a[i-1] == 2))
42.
s ++;
43.
}
44.
printf
(
"%d\n"
, s );
45.
}
46.
// system( "pause" );
47.
return
0;
48.
}