扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
#includestdio.h
创新互联专业为企业提供绥滨网站建设、绥滨做网站、绥滨网站设计、绥滨网站制作等企业网站建设、网页设计与制作、绥滨企业网站模板建站服务,十年绥滨做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
main()
{
int i,x;
int flag;
scanf("%d",x);
flag=0;
for(i=2;ix;i++)
{
if(x%i==0)
{flag=1;break;}
}
if(flag==0){printf("%d是素数\n",x);}
else if(flag==1){printf("%d不是素数\n",x);}
}
程序流程图就自己画吧,这个挺简单的。
由问题分析可知,该问题考虑用双层循环结构实现。
外层循环对start〜end之间的每个数进行迭代,逐一检查其是否为素数。外层循环的循环变量用变量m表示,m即代表当前需要进行判断的整数,显然其取值范围为start≤m≤end。
内层循环稍显复杂,完成的功能是判断当前的m是否为素数。设内循环变量为m,程序设计时i从2开始,直到为止。用i依次去除需要判定的整数m,如果m能够被中的任何一个整数所整除,则表示i必然小于或等于,则可以确定当前的整数m不是素数,因此,应提前结束该次循环。如果n不能被中的任何一个整数所整除,则在完成最后一次循环后,i还需要加1,即,之后才终止循环。此时,可以确定当前的整数m为素数。
可以使用标志位flag来监控内外循环执行的情况。在定义变量时将flag初值设为1,在内层循环中判断时,如果m能够被中的任何一个整数所整除,则在内循环中将flag设置为0。如果m不能被中的任何一个整数所整除,则在内循环中不会修改flag标志的值,退出内循环后它的值仍为1。此时在外循环中对flag的值进行判断,如果flag=0,则显然当前的m不是素数,如果flag=1,则当前的m是素数,应该将其打印出来。
还需要注意的是,在外循环中,每次要进行下一次迭代之前,要先将flag标志再次置为1。
程序流程图:
下面是完整的代码:#includestdio.h
#includemath.h
int main()
{
int start, end, i, k, m, flag=1, h=0;
do
{
printf("Input START and END:");
scanf("%d%d", start, end);
}while(!(start0 startend));
printf("......... prime table(%d-%d).........\n", start, end);
for(m=start; m=end; m++)
{
k=sqrt(m);
for(i=2; i=k; i++)
if(m%i==0)
{
flag=0;
break;
}
if(flag)
{
printf("%-4d",m);
h++;
if(h%10==0)
printf("\n");
}
flag=1;
}
printf("\nThe total is %d", h);
return 0;
}
运行结果:Input START and END:1 100
......... prime table(1-100).........
1 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
它的算法是:
输入n后,让i取值在2~n/2就循环,逐一比较看n能否被i整除;如果能被其中任何一个i的值整除,提前退出循环,否则i的值+1后继续。
当退出循环后检测,如果i的值=n/2就说明它是提前退出循环的,n不是素数;否则说明n是素数。
至于i循环的范围,最大的是直接根据素数的定义,检测2~(n-1)
稍改进一点的,因为大于n/2的肯定不能整除,就只检测2~n/2
更优一点的,是根据n如果有除1和它自身之外的其它因子,至少有一个在2~√n之间,那么 i 的循环范围就只要 2~√n 就可以了。
// 比如我在main函数里调用fun函数求5是不是素数
void main ()
{
int flag;
flag = fun(5);//进入函数fun,并且把值5传给fun的参数 n
}
int fun(int n)
{
int i;
// 函数运行到这进入for循环,
// 第一次循环i=5成立,执行if(n%i==0)判断n能否被i整除,显然5不能被2整除条件不
// 成立不退出循环,i++,i的值由2变成3,继续第二次循环,判断5能否被3整除
// 不能被3整除继续循环,判断能否被4整除,不能继续循环
// 到最后5只能被5整除,i=5退出循环
for(i=2;i=n;i++)
if(n%i==0)
break;
// i=5,n=5 条件成立,函数返回1,说明5是素数。
if(i==n)
return 1;
else
return 0;
}
#includestdio.h
#includemath.h
int main()
{
int c,d,k,prime[101];
for(c=2;c=100;c=c+1)
prime[c]=0;
d=2;
do
{
k=d;
if(prime[k]==0)
{
k=k+d;
while(k=100)
{
prime[k]=1;
k=k+d;
}
}
}
while(d=sqrt(100))
for(c=2;c=100;c++)
if(prime[c]==0)
countcendl;
return 0;
}
#include "stdio.h"
int is_prime(int x)//判断是否是素数的函数,是素数,返回1,不是则返回0
{
int i;
for(i=2;i=x/2;i++)
if(x%i==0)
return 0;
return 1;
}
void main()
{
int i,j=0;
for(i=1;i=100;i+=2)//素数属于奇数,减少循环次数。
if(is_prime(i))
{
printf("4d%",i);
j++;
if(j%10==0j!=0)
printf("\n");//每行打印十个素数,
}
}
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流