首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

急求任意两数间的素数,这个程序哪错了啊为什么运行不出来呢?解决办法

2012-04-15 
急!求任意两数间的素数,这个程序哪错了啊?为什么运行不出来呢?#includestdio.h#includemath.hint main

急!求任意两数间的素数,这个程序哪错了啊?为什么运行不出来呢?
#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啊
[解决办法]
探讨
scanf("%d %d",&amp;a,&amp;b);
先说这个,为什么不将输入直接扫给a b啊

[解决办法]
a=a+b;
b=a-b;
a=a-b;

这样交换a b,强人啊!
[解决办法]
计算机中,int 有个尺寸限制,如果说是4字节吧,最大是x,现在取 a 等于 x,b 等于 x-1,二者相加,必然超出了int范围。

这时这样交换会不会有问题,值得探讨!也许我错了,别笑我!
[解决办法]
不会有问题,即使溢出了,后面的减法又会正确地转回来。
不过以这种花哨、降低效率且低可读性来进行值交换的做法不值得推崇。

探讨

计算机中,int 有个尺寸限制,如果说是4字节吧,最大是x,现在取 a 等于 x,b 等于 x-1,二者相加,必然超出了int范围。

这时这样交换会不会有问题,值得探讨!也许我错了,别笑我!

热点排行