标题: 梅森素数小程序
秋海棠
新手上路
Rank: 1



UID 8653
精华 0
积分 1
帖子 1
阅读权限 10
注册 2005-11-14
发表于 2005-11-14 21:18  资料  短消息  加为好友 
梅森素数小程序

#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");
}
很不好意思啊,我看了"南方周末"后就写了这个程序.我只会这些,我发表在这里其实是想知道怎么求更大的了.有谁可以告诉我吗?

顶部
[广告] Einstein@Home 官方优化程序,推荐使用!
wreck
论坛知事
Rank: 3Rank: 3


UID 3286
精华 0
积分 311
帖子 65
阅读权限 10
注册 2004-11-14
发表于 2005-11-15 11:57  资料  短消息  加为好友 
那就得寻找表示更大的数的方法
好像有个叫做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;
}





@@
顶部
碧城仙
管理员
Rank: 7Rank: 7Rank: 7



UID 403
精华 54
积分 8773
帖子 8087
阅读权限 102
注册 2004-1-24
来自 华东理工大学
发表于 2005-11-15 13:00  资料  主页 短消息  加为好友 
GIMPS 是开放源代码的,WIN 平台 24.14 版本 Prime95 程序源代码下载地址:
ftp://mersenne.org/gimps/source2414.zip

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





快是快乐的一半,快乐才是计算的全部。
癌症研究相关项目:Folding@home、Rosetta@home、Help Conquer Cancer(WCG)、Cels@Home
顶部
coralding
新手上路
Rank: 1



UID 11187
精华 0
积分 2
帖子 2
阅读权限 10
注册 2006-5-18
发表于 2006-5-18 18:53  资料  短消息  加为好友 
难道没人研究过吗?这个源代码似乎少了什么东西,根本无法形成可执行文件。

顶部
碧城仙
管理员
Rank: 7Rank: 7Rank: 7



UID 403
精华 54
积分 8773
帖子 8087
阅读权限 102
注册 2004-1-24
来自 华东理工大学
发表于 2006-5-18 20:07  资料  主页 短消息  加为好友 
ftp://mersenne.org/gimps/  下面还有其他版本的源代码,不会都缺少头文件吧?





快是快乐的一半,快乐才是计算的全部。
癌症研究相关项目:Folding@home、Rosetta@home、Help Conquer Cancer(WCG)、Cels@Home
顶部
wreck
论坛知事
Rank: 3Rank: 3


UID 3286
精华 0
积分 311
帖子 65
阅读权限 10
注册 2004-11-14
发表于 2006-5-19 14:08  资料  短消息  加为好友 
那个源文件好像不能直接用VC编译,gcc应该可以,但是我又不会用gcc





@@
顶部
Youth
管理员
Rank: 7Rank: 7Rank: 7
勿忘国耻~振兴中华



UID 1613
精华 29
积分 8953
帖子 8653
阅读权限 102
注册 2004-6-30
来自 上海
发表于 2006-5-19 15:58  资料  主页 短消息  加为好友 
可以的,里面有vs的项目文件

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





欢迎所有 BOINC 用户加入 Team China 团队 | my Stats...
顶部
 



当前时区 GMT+8, 现在时间是 2008-7-6 14:28
沪ICP备05042587号

本论坛支付平台由支付宝提供
携手打造安全诚信的交易社区 Powered by Discuz! 5.5.0 © 2001-2007 Comsenz Inc.
清除 Cookies - 联系我们 - 中国分布式计算总站 - Archiver - WAP