005:递归统计素数

  • Post author:
  • Post category:其他


网上能够找到的使用C语言递归统计素数的文章比较少,因此写一篇,仅供参考,如有疏漏欢迎指正。

我用到的统计素数方法,是先开一个 notprime数组,里面的数值只有0,1。

notprime[i],当i是素数,notprime[i]为0;反之为1。

之所以要这样设置,是因为非素数的数相对好判断(只要找到非1非本身的因数即可),所以先把notprime[非素数]赋值成1,其余是零。

代码如下

int notprime[1005]={0};
void init()
{
    notprime[1]=1;
    for(int i=2;i<1000;i++)
    {
        if(!notprime[i])
        {
            for(int j=2;i*j<1000;j++)
            {
                notprime[i*j]=1;
            }
        }
    }
}

再用递归,前n个数中素数数量=前n-1个数中素数数量+ !=notprime[n];递归终点为n==1;

注意下标别标错了哦!

上完整代码

#include<stdio.h>
int num[11];
int notprime[1005];
int countPrime(int n)
{
    return n==1? !notprime[num[n-1]]:!notprime[num[n-1]] + countPrime(n-1);
}
void init()
{
    notprime[1]=1;
    for(int i=2;i<1000;i++)
    {
        if(!notprime[i])
        {
            for(int j=2;i*j<1000;j++)
            {
                notprime[i*j]=1;
            }
        }
    }
}
int main()
{
    init();
    int n;
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    {
        scanf("%d",&num[i]);
    }
    printf("%d",countPrime(n));
    return 0;
}



版权声明:本文为major_in_data_原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。