C语言程序设计求素数

C语言程序设计求素数,第1张

在程序的开头加入#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语言程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9282734.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-26
下一篇 2023-04-26

发表评论

登录后才能评论

评论列表(0条)

保存