急!求任意两数间的素数,这个程序哪错了啊?为什么运行不出来呢?
#include<stdio.h>
#include<math.h>
int main()
{
int m,i,a,b,leap;
scanf("%d %d",&a,&b);
if(a>b)
{a=a+b;
b=a-b;
a=a-b;
}
leap=0;
for(m=a;m<=b;m++)
{
for(i=2;i<=sqrt(m);i++)
{
if(m%i==0)
break;
else
leap=1;
}
if(leap)
printf("%d ",m);
}
printf("\n");
return 0;
}
[解决办法]
你的判断根本不对!
m不能被i整除时就一定是素数么?
- C/C++ code
#include<stdio.h>#include<math.h>int main(){ int m,i,a,b,leap; scanf("%d %d",&a,&b); if(a>b) { a=a+b; b=a-b; a=a-b; } leap=0; for(m=a;m<=b;m++) { for(i=2;i<=sqrt(m);i++) { if(m%i==0)//m能被i整除则一定不是素数 break; } if(i>sqrt(m))//判断是否判断了所有的i,如果是则说明是素数 printf("%d ",m); } printf("\n"); return 0;}
[解决办法]
scanf("%d %d",&a,&b);
先说这个,为什么不将输入直接扫给a b啊
[解决办法]
[解决办法]
a=a+b;
b=a-b;
a=a-b;
这样交换a b,强人啊!
[解决办法]
计算机中,int 有个尺寸限制,如果说是4字节吧,最大是x,现在取 a 等于 x,b 等于 x-1,二者相加,必然超出了int范围。
这时这样交换会不会有问题,值得探讨!也许我错了,别笑我!
[解决办法]
不会有问题,即使溢出了,后面的减法又会正确地转回来。
不过以这种花哨、降低效率且低可读性来进行值交换的做法不值得推崇。