您的位置:首页 > 其它

素数筛选法----孪生素数问题

2013-12-01 13:19 267 查看
素数筛选法:
开一个大数组,下标表示所有1 -- m之间的数。思路是把素数标记为1, 非素数标记为0;因为偶数肯定不是素数,所以先标记所有偶数为0;还有一种方法是让下标从3开始,每次加2,就避过了偶数,这样不用管偶数,更加省时。然后就是从3到根号下m之间,只要是素数,它的倍数肯定不是素数,标记为0.这样,剩下的被标记为1的奇数就是要找的1
-- m之间的所有素数。另外,总共进行n次测试,在测试之前标记完成,每次测试只要取其结果即可。所以第一个是比较标准的代~~


孪生素数问题

时间限制:3000 ms | 内存限制:65535 KB
难度:3描述写一个程序,找出给出素数范围内的所有孪生素数的组数。一般来说,孪生素数就是指两个素数距离为2,近的不能再近的相邻素数。有些童鞋一看到题就开始写程序,不仔细看题,咱们为了遏制一下读题不认真仔细的童鞋,规定,两个素数相邻为1的也成为孪生素数。输入第一行给出N(0<N<100)表示测试数据组数。接下来组测试数据给出m,表示找出m之前的所有孪生素数。(0<m<1000000)
输出每组测试数据输出占一行,该行为m范围内所有孪生素数组数。
样例输入
1
14
样例输出
4
来源[hzyqazasdf]原创
上传者hzyqazasdf
#include <stdio.h>#define Max_len 1000001int record[Max_len] = {0};void prime();int main (){int n, i, m, num, sum;prime();scanf("%d", &n);while (n--){num = 2;sum = 0;scanf("%d", &m);for(i = 3; i <= m; i++){if(record[i] != 1 && i % 2 != 0){if(i - num == 1 || i - num == 2){sum ++;}num = i;//num每次都为当前值,进入下一次比较时就实现了用下一个素数减去前一个素数。}}printf("%d\n", sum);}return 0;}void prime (){int i, j;for(i = 3; i <= Max_len / 2; i += 2) {if(record[i] == 0){for(j = 3; j * i < Max_len; j ++){//也可以写成:for(j = i + i; j <= Max_len; j + = 2)record[j] = 1;record[i * j] = 1;}}}}
#include<stdio.h>
02.
#include<math.h>
03.
#include<string.h>
04.
#include<stdlib.h>
05.
int
p[1000010],
prime[1000010];
06.
int
main(
void
)
07.
{
08.
int
n,
m, i, j, count, k;
09.
scanf
(
"%d"
,
&n);
10.
for
(i
= 0; i < n; i++)
11.
{
12.
count
= 0;
13.
memset
(prime,
1,
sizeof
(prime));
14.
scanf
(
"%d"
,
&m);
15.
if
(m
> 1)
16.
{
17.
for
(j
= 3; j <= m; j += 2)
18.
{
19.
if
(prime[j])
20.
{
21.
for
(k
= j + j; k <= m; k += j)
22.
prime[k]
= 0;
23.
}
24.
}
25.
p[0]
= 2;
26.
for
(j
= 3, k = 1; j <= m; j += 2)
27.
{
28.
if
(prime[j])
29.
{
30.
p[k]
= j;
31.
k++;
32.
}
33.
}
34.
35.
//
for(j = 0; j < k; j++)
36.
//
printf("%d ", p[j]);
37.
//
printf("\n");
38.
for
(j
= 0; j < k - 1; j++)
39.
{
40.
if
((p[j+1]
- p[j]) == 1 || (p[j+1] - p[j])== 2)
41.
{
42.
count++;
43.
}
44.
}
45.
}
46.
printf
(
"%d\n"
,
count);
47.
}
48.
return
0;
49.
}


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: