解决C问题

来源:百度知道 编辑:UC知道 时间:2024/05/10 14:26:24
#include"stdio.h"
int a[10]={8,43,22,75,66,54,108,99,19,111};
int isp(int m)
{

int i;
for(i=2;i<m;i++)
{
if(m%i==0)
return 0;
else
return 1;
}
}
void main()
{
int num=0;
int i;
for(i=0;i<10;i++)
if(isp(a[i]))
num++;
printf("素数的个数为%d:\n",num);
}
统计数组a中的素数的个数,调试结果是5,一看结果就知道结果应该是3,而不是5,素数就
43,19,111这三个。程序调试时没有错,为什么结果错了。请指出错误之处。

isp()函数写的不对呀。。
for(i=2;i<m;i++)
{
if(m%i==0)
return 0;
else
return 1;//这句是错的。。
}

如果要说明m不是素数, 那必须把所有的i都验证一遍才可以~~
而你的程序, 只验证了一个i, 如果不能整除就直接返回了1, 肯定不对啊~~
改成这样:

for(i=2;i<m;i++)
{
if(m%i==0)
return 0;
}
return 1;//把所有i都验证一遍, 才能确定m是素数

这样就好了~!

for(i=2;i<m;i++)
{
if(m%i==0)
return 0;
else
return 1;
}
以上这段有问题。
素数:只能被1或自身整除的整数。
判断整数n是否为素数——采用穷举法求解。
基本算法:若 k%m==0 则说明 k 不是素数。其中 m 的取值范围为:2~k的算术平方根。
简单修改:
for(i=2;i<m/2;i++)
if(m%i==0)
return 0;
return 1;

比较高效的算法是智能学习机制:
建立一个存储(可以使用链表),可以先存储上一系列的素数列表
试商的时候,可以从2开始,只试素数
并且,每次判断为素数的数,都按照从小到大的排列顺序,增加到我们建立的素数列表中

这样,我们的这个程序就会越算越快.