网上能够找到的使用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 版权协议,转载请附上原文出处链接和本声明。