c判断素数

来源:百度知道 编辑:UC知道 时间:2024/09/28 17:56:28
#include"stdio.h"
#include"math.h"
main(){
int i,a,flag;
for(i=101;i<=200;i++)

{
flag=1;
for(a=2;a<=sqrt(i);a++)
{if(i%a==0){flag=0;break;}
}
if(flag==1)printf("%d ",i);
}

}
初学编程,网上求101到200中素数的代码大都类似上面的,都是设置一个标志变量(这里是flag)
我想能不能就设置变量i,a让后用控制流程的方法实现,关键就是怎么实现让i对 所有可能 的a进行求余运算值都不为0后再printf,而不是只要i%a!==0就跳出
我写的错误代码:
#include "stdio.h"
#include "math.h"
void main()
{
int i,a;
for(i=101;i<=200;i++)
{
for(a=2;a<=sqrt(i);a++)
{
if (i%a!=0)
break;
}
printf("%d ",i);
}
}
求高手给个不用设置标志变量而用流程控制解决的代码
是判断a是否等sqrt(i)吧? 在第二个循环里用if (i%a!=0)
continue; 让后再判断a是否等sqrt(i)?

if (i%a!=0)
break;
要是像你这样如果i%a!=0则break的话得到的结果肯定会是所有的数。。。。
不用标志变量也可以。一楼说的不对,应该是判断a的值。如果a>sqrt(i)),则说明程序没有被break;也就是说明没有数能整除i;其实跟定义个标志变量的道理是一样的。

程序如下
#include "stdio.h"
#include "math.h"
void main()
{
int i,a;
for(i=101;i<=200;i++)
{
for(a=2;a<=sqrt(i);a++)
{
if (i%a==0)
break;
}
if(a>sqrt(i))
printf("%d ",i);
}
}

”关键就是怎么实现让i对 所有可能 的a进行求余运算值都不为0后再printf,而不是只要i%a!==0就跳出“

关于这个问题。。。如果你有几千万几亿个数。你也要让计算机没次都把所有可能的a都进行求余??if(i%a==0),这说明有一个数能整除i,而什么是素数?只要能被一个数(1除外),则说明它不是素数。既然已经判断出来结果了,为什么还要让计算机继续去验证其他的数?

拿去,我从来没用过什么flag

#include"stdio.h"
#include"math.h"
main(){
int i,a;
for(i=101;i<=200;i++)
{
for(a=2;a<(int)sqrt(i)+1;a++)
if(!(i%a))break;
if(a>(int)sqrt(i))printf("%d ",i);
}
}