NYOJ-26-孪生素数问题

来源:互联网 发布:淘宝网男鞋冬季 编辑:程序博客网 时间:2024/05/09 09:47

描述
写一个程序,找出给出素数范围内的所有孪生素数的组数。一般来说,孪生素数就是指两个素数距离为2,近的不能再近的相邻素数。有些童鞋一看到题就开始写程序,不仔细看题,咱们为了遏制一下读题不认真仔细的童鞋,规定,两个素数相邻为1的也成为孪生素数。

输入
第一行给出N(0< N <100)表示测试数据组数。
接下来组测试数据给出m,表示找出m之前的所有孪生素数。
(0< m <1000000)

输出
每组测试数据输出占一行,该行为m范围内所有孪生素数组数。

样例输入
1
14

样例输出
4

一道质数检测的水题。

#include <stdio.h>#define MAXSIZE 1000100int numA[MAXSIZE] = {1, 1};  //1非质数,0质数int numB[MAXSIZE];int main(int argc, const char * argv[]){    int N;    scanf("%d", &N);    int key = 0;    for (int i = 2; i < MAXSIZE; i++)    {        if (!numA[i])        {            numB[key++] = i;        }        for (int j = 0; i * numB[j] < MAXSIZE && j < key; j++)        {            numA[i * numB[j]] = 1;            if (!(i % numB[j]))            {                break;            }        }    }    while (N--)    {        int m, ans = 1;        scanf("%d", &m);        for (int i = 1; i < key; i++)        {            if (numB[i] > m)            {                break;            }            if (!numA[numB[i] - 2])            {                ans++;            }        }        if (m < 3)        {            printf("0\n");        }        else        {            printf("%d\n", ans);        }    }    return 0;}
0 0
原创粉丝点击