用C语言求10以内的素数

来源:百度知道 编辑:UC知道 时间:2024/09/21 20:20:32
{
int m,i;
for(m=2;m<=10;m++){
for(i=2;i<m;i++)
if(m%i!=0) break;
printf("%3d",m);
}
}
这个程序为什么输入的是2,3,4,5,6,7,8,9,10啊?break似乎没起作用。求能正确的程序(我是菜鸟,所以程序写得简单易懂些,谢谢了)

{
int m,i;
for(m=2;m<=10;m++)
{
for(i=2;i<m;i++)
if(m%i!=0) /*为什么要用!=呢,这样只要遇到不能被整除的数就会结束循环,这样有些数字就会判断错误*/
break; //跳出内层循环
printf("%3d",m); /*这个输出在外层循环中,只要内层循环结束,就会执行,所以就算break起作用了,也只是跳出内层循环,还是会执行这一句,所以会顺序输出m的值*/
}
}

改:
{
int m,i;
for(m=2;m<=10;m++)
{
for(i=2;i<=m;i++) //改成i<=m,因为素数只能被1和他本身整除
if(m%i==0)//判断是否有数能将m整除
break; //有则跳出内层循环
if(i==m)/*如果m能被其他数整除,则跳出循环后i值一定比m小,如果只被m本身整除,则跳出循环后i==m,证明m为素数*/
printf("%3d",m); //满足条件才输出
}
}

起了作用,但是判断错了
你的程序的意思是:从2开始到这个数的所有数中,如果有任何一个不能整除它,则输出这个数..
结果当然是输出所有整数啦..因为任何一个数n都不可能被所有1~n-1的数整除啊
逻辑错误

#include <stdio.h>
int main()
{
int i,m;
for(i=2;i<=10;i++)
{
for(m=2;m<=i/2;m++) //把i/2换成sqrt(i)更优
if(i%m==0)
break;
if(m>i/2) //如果m增大到超过i/2了,说明没有任何一个m整除i,所以i是