C语言判断一个数是不是质数

C语言判断一个数是不是质数,第1张

else if(a=i)

应该改成

for(a=2;a<=gh2+1;a++)

{

if(i%a==0) {printf("%d不是质数\n",i); goto loop;}

else if(a>=gh2) {printf("%d是质数\n",i); goto loop;}

}

因为当i>2时sqrt(i)肯定比i小,你原来的else if(a==i)肯定判断不符合

方法一:将m被 2 ~ m-1 之间的每一个整数去除,如果都不能被整除,所以m是一个质数。

方法二:将m被 2 ~ √m之间的每一个整数去除。如果m不能被 2 ~√m 间任一整数整除,m必定是质数。

两段代码的输出结果相同。

①输入一个整数:1

所以1是质数。

②输入一个整数:97

所以97是质数。

③输入一个整数:10

所以10不是质数。

质数:又称素数,所谓素数是指除了1和它本身以外,不能被任何整数整除的数,例如17就是素数,因为它不能被2~16的任一整数整除。

C++:在中国大陆的程序员圈子中通常被读做“C加加”,而西方的程序员通常读做“C plus plus”,“CPP”。 它是一种使用非常广泛的计算机编程语言。C++是一种静态数据类型检查的、支持多重编程范式的通用程序设计语言。它支持过程化程序设计、数据抽象、面向对象程序设计、泛型程序设计等多种程序设计风格。

参考资料

C语言中文网C语言中文网[引用时间2017-12-31]

楼上的别在那误导人,你那叫筛选法吗?

先解释一下筛选法的步骤:

<1>

先将1挖掉(因为1不是素数)。

<2>

用2去除它后面的各个数,把能被2整除的数挖掉,即把2的倍数挖掉。

<3>

用3去除它后面的各数,把3的倍数挖掉。

<4>

分别用4、5…各数作为除数去除这些数以后的各数。

上述 *** 作需要一个很大的容器去装载所有数的集合,只要满足上述条件,即2的N次方的全部置0,3的N次方的全部置0,4的N次方的全部置0。。。一直到这个数据集合的末尾,这样一来不为0的数就是素数了,然后按下标在里面进行查找就好了

筛选法程序如下

#include<stdioh>

int

main()

{

int

x[100001];

int

temp,n,

i;

//初始化数组

for(i=0;i<100001;i++)

x[i]=0;

//初始化数组完成

/

预计结果,

数组中质数为0,其它为1

/

x[0]=x[1]=1;//因为

0和1不能通过计算得到,所以只能手工置1

,1即不是合数也不是质数

for(i=2;i<100001;i++)

{//循环数组中的每个数

if(x[i]==0){//如果该数所存的值为0,即第一次接触此数

temp=2i;//将它的二倍,及n倍(要小于100000)

,都置为1,因为这些数都能被i整除

while(temp<=100000)

{

x[temp]=1;

temp+=i;

}

}

}

scanf("%d",&n);

while(n

!=

0)

{

if(x[n]==0)

printf("素数\n");

else

printf("合数\n");

scanf("%d",&n);

}

return

0;

}

如果你觉得这个方法不好理解,你可以用上面他们写的那些常规算法,但是数字过大的话,算起来是很慢的

根据质数的定义,在判断一个数n是否是质数时,只要用1至n-1去除n,看看能否整除即可。

还有更好的办法:先找一个数m,使m的平方大于n,再用小于等于m的质数去除n(n为被除数),如果都不能整除,则n必然是质数。如我们要判断1993是不是质数,5050>1993,那么只要用1993除以<50的质数看是否能整除,若不能即为质数。100以内的质数有25个,还是比较好记的,只要记熟100以内质数,就可以快速判断10000以内的数是不是质数。

100以内的质数有2、3、5、7、11、13、17、19、23、29、31、37、41、43、47、53、59、61、67、71、73、79、83、89、97,在100内共有25个质数。

只有1和它本身两个因数的自然数,叫质数(或称素数)。(如:由2÷1=2,2÷2=1,可知2的因数只有1和它本身2这两个约数,所以2就是质数。与之相对立的是合数:“除了1和它本身两个因数外,还有其它因数的数,叫合数。”如:4÷1=4,4÷2=2,4÷4=1,很显然,4的因数除了1和它本身4这两个因数以外,还有因数2,所以4是合数。)

这是我以前写过的判断质数的程序,希望对你有帮助。

#include<stdioh>

int

prime(int

a)

{

int

i;

for(i=2;i<=a/2;i++)

{

if(a%i==0)

break;

}

if(i>a/2)

return

1;

else

return

0;

}

int

main(void)

{

int

x;

printf("请输入一个整数:");

scanf("%d",&x);

if(prime(x))

printf("%d为素数\n",x);

else

printf("%d不是素数\n",x);

}

主要是加了break

以上就是关于C语言判断一个数是不是质数全部的内容,包括:C语言判断一个数是不是质数、如何用C++判断一个数是否为质数、C语言筛选法判断质数等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存