在程序的开头加入#include<mathh>
下面是fun函数:
int fun(int mm,int b[MAX])
{
int i,mmm,n=0;
for(mmm=2;mmm<=mm;mmm++)
{
for(i=2;i<=sqrt(mmm);i++)
if(mmm%i==0) break;
if(i>sqrt(mmm))
{
b[n]=mmm;
n+=1;
}
}
return n;
}
分析:
如果mm<=1,外循环不启动,直接返回n,此时n=0
如果mm=2,外循环启动,内循环i<=sqrt(mmm)的条件不满足,不启动,内循环下面的判断条件满足,于是让b[n]=mmm,n+=1,即找到一个符合条件的素数,此时b[n]既b[0]=2,然后n+=1,表示符合条件的素数的个数加1
同样,当mm=3的时候,内循环由于条件不满足,是不会执行的,但是在内循环下面的条件判断都满足,所以会把结果保存在n和b[n]里面,这时,外循环要执行2次
当mm>3时,内循环也会启动,但是要等内循环结束之后i的值满足条件的才是素数,程序的可靠信完全可以放心
刚刚又重新分析了一遍代码,稍微改了改,没问题了
改了一点点,大约10秒钟运行完1000 0000
1秒运行完100 0000
首先你要知道,打印语句是很慢的,这个10秒是删除掉打印语句后的速度
------------------------------------
#include<mathh>
#include<stdioh>
void main()
{
long i,n;
printf("%d ", 2);
for(n=3; n<=10000000; n+=2)
{
int temp=int(sqrt(n));
for(i=3; i<=temp; i+=2)//改成+2
if(n %i == 0)
break;
printf("%d ", n);//之前的判断去掉
}
printf("\n");
}
你自己弄个数字测试一下就知道了 首先说这个算法的原理:求任意一个正整数m是否是素数 如果m能依次除以整数i(2<i<m,i依次取2到m-1)余数都不为0则为素数。事实上i只需取2到 sqrt (m),即2<=i<= sqrt (m)
现在我们举例说明为什么出现if (i > k)
我们看 比如m=13 则k= sqrt (m)=3 即2<=i<=3
先是i=2,显然余数不为0 然后i++取i=3 余数也不为0 然后i++ 则i=4
显然i不满足条件: 2<=i<=3 于是跳出循环 此时i=4了 则i>3即i>k故m=13是素数
总结:其实你的问题很简单,虽然如你所说前面for循环不是已经有限制条件i<=k 但是 每循环一次 i++后 才会来判断这个条件的 (除了第一次进入循环的时候)
说了这么多 给分
12345678910111213141516171819
// 素数,也叫质数,就是指除了1和该数本身以外,不能被其他任何整数整除的正数 #include<stdioh>#include<mathh>void main(){ int m, k, i, n=0; for(m=1; m <= 200; m=m+2) { k = sqrt(m); for(i=2; i <= k; i++) if(m % i == 0) break; if(i >= k + 1) { printf("%5d",m); n = n + 1; } }}请放心使用,有问题的话请追问
满意请及时采纳,谢谢,采纳后你将获得5财富值。
你的采纳将是我继续努力帮助他人的最强动力!
matlab里有一个函数isprime,是用来判断一个数a是不是素数。x=isprime(a),如果a是素数则x等于1,否则等于0;你要是求素数的话用一个for语句就行了,给你写了个m文件,求1到n之间所有素数:n=input('enterdatan:');j=1;fori=1:nifisprime(i)x(j)=i;j=j+1;endendx
k=sqrt(m); for(i=2;i<=k;i++); if(m%i==0) break; if(i>=k+1) { printf(" %d",m); n=n+1;
由以上程序知,k中存储的是m的开平方根值,用以判断循环的结束。或者改用k=m/2;也可以;
break是用来跳出for循环的 m有根(被整除),就不用再判断if 语句了。 i>=k+1成立的话,说明m在2---k的范围内没有根,是素数,则有n+1
由每符合条件一次,n的值加一,可知n用来统计素数个数的。
以上就是关于C语言程序设计求素数全部的内容,包括:C语言程序设计求素数、求一个最快的C语言算素数程序、请教一道关于求素数的C语言程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)