找回密码
 新注册用户
搜索
查看: 12355|回复: 6

梅森素数小程序

[复制链接]
发表于 2005-11-14 21:18:13 | 显示全部楼层 |阅读模式
#include <stdio.h>
long MP(long i)
{int j=1;
while(i)
{j=2*j;
  i--;
}
return(j);
}
long IF(long i)
{int j;
for(j=2;j<i;j++)
    if(i%j==0) break;
return(j==i?1:0);
}
main()
{long i,T,Y,M;
for(i=2;i<31;i++)
    {T=IF(i);
     if(T)
     {M=MP(i)-1; Y=IF(M);
     if(Y) printf("M%ld=%ld ",i,M);
     }
    }
printf("\n");
}
很不好意思啊,我看了"南方周末"后就写了这个程序.我只会这些,我发表在这里其实是想知道怎么求更大的了.有谁可以告诉我吗?
回复

使用道具 举报

发表于 2005-11-15 11:57:46 | 显示全部楼层
那就得寻找表示更大的数的方法
好像有个叫做gmp的库可以表示任意精度的数
但是我研究了一段时间还是不大会用

我自己写了一个程序可以表示几千位的数,而且实现了其加减乘除乘方等基本运算
但是效率很低

我是用一个数组来表示一个数的
如a[1000]表示一个1000位的数
a[0]代表这个数的位数,a[1]表示个位,a[2]表示十位,a[a[0]]表示最高位
以下为摘抄的乘法的算法

BOOL MyMath::Mult(int aTmp[], int bTmp[], int cTmp[])
{
        BigNum bgRes;
        BigNum bgTmp;
        BigNum bgTTmp;

        bgTmp.m_a[0] = aTmp[0];

        for(int ib=1;ib<=bTmp[0];ib++)
        {
                bgTmp.Clear();
                for(int ia=1;ia<=aTmp[0];ia++)
                {
                        bgTmp.m_a[ia] = aTmp[ia]*bTmp[ib];
                }
                ZZH(bgTmp.m_a);
                fz(bgTTmp.m_a, bgTmp.m_a);
                for(int ibB=1;ibB<ib;ibB++)
                {
                        Mult10(bgTTmp.m_a, bgTTmp.m_a);
                }
                Add(bgRes.m_a, bgTTmp.m_a, bgRes.m_a);
        }

        fz(cTmp, bgRes.m_a);
        return TRUE;
}


/*
*        dst = src*10
添加日期: 2005-01-21 21:58
*/
BOOL MyMath::Mult10(int srcTmp[], int dstTmp[])
{
        BigNum bgI;
        fz(bgI.m_a, srcTmp);

        for(int i=bgI.m_a[0]+1;i>1;i--)
        {
                dstTmp[i] = bgI.m_a[i-1];
        }
        dstTmp[1] = 0;
        dstTmp[0] = bgI.m_a[0] + 1;
        return TRUE;
}
回复

使用道具 举报

发表于 2005-11-15 13:00:33 | 显示全部楼层
GIMPS 是开放源代码的,WIN 平台 24.14 版本 Prime95 程序源代码下载地址:
ftp://mersenne.org/gimps/source2414.zip

大家可以下载了研究研究。
回复

使用道具 举报

发表于 2006-5-18 18:53:23 | 显示全部楼层
难道没人研究过吗?这个源代码似乎少了什么东西,根本无法形成可执行文件。
回复

使用道具 举报

发表于 2006-5-18 20:07:22 | 显示全部楼层
ftp://mersenne.org/gimps/  下面还有其他版本的源代码,不会都缺少头文件吧?
回复

使用道具 举报

发表于 2006-5-19 14:08:17 | 显示全部楼层
那个源文件好像不能直接用VC编译,gcc应该可以,但是我又不会用gcc
回复

使用道具 举报

发表于 2006-5-19 15:58:36 | 显示全部楼层
可以的,里面有vs的项目文件

我刚才试了一下,prp目录下的可以通过
但prime95目录下的说是少一个叫security.c的文件
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 新注册用户

本版积分规则

论坛官方淘宝店开业啦~

Archiver|手机版|小黑屋|中国分布式计算总站 ( 沪ICP备05042587号 )

GMT+8, 2024-5-4 02:38

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表