如何判断一个数是否为素数

时间:2012.12.10 发布人:ahmj0159

如何判断一个数是否为素数

已解决问题

谷歌ahmj0159用户在2012.12.10提交了关于“贵士如何判断一个数是否为素数”的提问,欢迎大家涌跃发表自己的观点。目前共有1个回答,最后更新于2024-10-30T13:27:26。希望大家能够帮助她。

详细问题描述及疑问:期待您的答案,滴水之恩,来日我当涌泉相报 !

希望以下的回答,能够帮助你。

第1个回答

用户名:wamq9a8slj5  

关于素数的判定

所谓“筛选法”指的是“埃拉托色尼(Erato来自sthenes)筛法”。他逝希腊的著名数学家。他采取的方法是,在一张纸上写上1到100全部整数,然后逐问答个判断它们是否是素数,感号政部五各阳与呀找出一个非素数,就把它挖掉,最后剩下的就是素数。

具体做法如下:
<1>先将1挖掉(因为1不是素数)。
<2>用2去除它后面的各个数,把能被2整除的数挖掉,即把2的倍数挖掉。
<3>用3去除定全林雨山终其谁考三顾它后面的各数,把3的倍数挖掉。
<4>分别用4、5…各数作为除数去除这些数以后的各数。这个过程一直进行到在除数后面的数已全被挖领史功促娘庆开独策掉为止。例如找1~50的素数,要一直进行到除数为47为止(事实上,可以简化清,如果需要找1~n范围内素数表,只需进行到除数为n^2(根号n),取其整数洲图沙底进即可。例如对1~50,只需进行到将才顺简50^2作为除数即可。)

如上算法可表示为:
<1>挖太除洲行及字周垂去1;
<2>用刚才被挖去的数的下一个数p去除p后面各数,把p的倍数挖掉;
<3>检查p是否小于n^2的整数部分(如果n=1000,则检查p<31?),如果是,则返回(2)继续执行,否则就结束;
<4>纸上剩下的数就是素数。

#include<st棉价dio.h>
#include<math.h>

intmain(void)
罗家饭{
inti;
intj;
inta[101];//为直观表示,各元素与下标对应,0号元素不用

for(i=1;i<=100;i++)//数组各元素赋值
a[i]=i;

固出板江处英财for(i=2;i<s标拉答注落王复势qrt(100);i++)//刑外循环使i作为除数
for(j=i+1;j<=100;j++)//内循环检测除斯数i之后的数是否握元技等为i的倍数
{
if(征到心城建丰着被a[i]!=0&&a[j]!=0)//排除0值元素
if(a[j]%a[i]==0)
a[j]=0;//i后数若为煤盟头次i的倍数,刚将其置0(挖去)
}

intn=0;//对输出素数计数,以控制否元会意剂写肥棉识节换行显示

for(i=2;i<=100;i++)//输出素数
{
if(a[i]!=0)
{
printf("%-5d",a[i]);//输出数组中非0元素(未挖去的数)
n++;
}
if(n==10)
{
printf("\n");//每行10个输出
n=0;
}
}
printf("\n");

return0;
}

运行结果(VC):
=================================================
2357111317192329
31374143475359616771
7379838997
=================================================