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语言筛选法判断质数等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)