啊哈磊_编程从这里起步

标题: 这是怎么回事 [打印本页]

作者: 星辰幻影    时间: 2013-12-19 21:50
标题: 这是怎么回事

下面这个求质数的程序,当我输入位数较大的数时,如123484654564时,电脑显示是质数,怎么回事

#include <stdio.h>
#include <stdlib.h>
int main()
{
        int a,b,c;
    c=0;
    scanf("%d",&b);
    for(a=2;a<b;a++)
        {
                if(b%a==0)
                {
                        c=1;
                         printf("%d\n",a);
                }
        }
    if(c==0)
                printf("质数\n");
    else
        printf("合数\n");
        system("pause");
        return 0;
}

WP_20131219_21_29_33_Pro (2).jpg (59.08 KB, 下载次数: 9)

WP_20131219_21_29_33_Pro (2).jpg

作者: rosynirvana    时间: 2013-12-19 21:51
123484654564 > 2^31 - 1
一个int已经放不下了

而且这么大的数字,用试除法耗费的时间是无法忍受的

如果想解决这个问题,可以研究一下用C实现无限精度运算和Rabin-Miller素性测试
作者: 星辰幻影    时间: 2013-12-20 07:49
rosynirvana 发表于 2013-12-20 00:50 123484654564 > 2^31 - 1 一个int已经放不下了

谢谢。。。(如果想解决这个问题,可以研究一下用C实现无限精度运算和Rabin-Miller素性测试)。。。这个不懂
作者: 4399APPLE    时间: 2013-12-20 09:43
星辰幻影 发表于 2013-12-20 07:49
谢谢。。。(如果想解决这个问题,可以研究一下用C实现无限精度运算和Rabin-Miller素性测试)。。。这个不 ...

缓冲区溢出
作者: rosynirvana    时间: 2013-12-20 13:02
4399APPLE 发表于 2013-12-20 09:43
缓冲区溢出

这个主题和缓冲区溢出有什么关系?
作者: rosynirvana    时间: 2013-12-20 13:08
星辰幻影 发表于 2013-12-20 07:49
谢谢。。。(如果想解决这个问题,可以研究一下用C实现无限精度运算和Rabin-Miller素性测试)。。。这个不 ...

如果你想用C算随便多大的数字,就去网上找找“无限精度运算”,或者“大数运算”

此外,用这种方法来验证大数的素性是没戏的,运算时间太长了,如果你想知道这么大的数字怎么判断素性,就去查Rabin-Miller Test
作者: 4399APPLE    时间: 2013-12-20 15:00
rosynirvana 发表于 2013-12-20 13:08
如果你想用C算随便多大的数字,就去网上找找“无限精度运算”,或者“大数运算”

此外,用这种方法来 ...

额,我感觉你在论坛里也说过
作者: 4399APPLE    时间: 2013-12-20 15:01
rosynirvana 发表于 2013-12-20 13:02
这个主题和缓冲区溢出有什么关系?

我怎么感觉它们是连在一起的……
作者: rosynirvana    时间: 2013-12-20 15:36
4399APPLE 发表于 2013-12-20 15:01
我怎么感觉它们是连在一起的……

缓冲区溢出和数字太大了溢出不是一回事情
作者: 星辰幻影    时间: 2013-12-22 18:03
谢谢了,涨知识了




欢迎光临 啊哈磊_编程从这里起步 (https://bbs.codeaha.com/) Powered by Discuz! X3.2