mathematica 发表于 2008-12-24 20:02:57

挑战无心人!!!!!!!!

无心人的发帖数量实在是太多了!
为了遏制住他的发帖速度,建议他
在找出第四个9901素数之前不要
再发帖子!


也许根本就不存在第四个9901
素数,如果这样的话,他永远就不用发帖子了!

无心人 发表于 2008-12-24 20:04:48

:L

你狠
超过一万位的数字很难测试

无心人 发表于 2008-12-24 20:21:25

*Primes> filter isPrime $ take 1000 $ map (1+) $ (iterate (\x -> x * 10000 + 9900) 9900)
测试用代码,目前没发现第四个,上千位的测试,代码很慢
懒得用GMP或者HugeCalc测试
C代码不如Haskell好写

medie2005 发表于 2008-12-24 20:48:44

9900*(1+10^4+..+10^4k)+1
=>
100*(10^(4k+1)-1)/101+1
=>
判断素性不难。只要知道10^(4k+1)-1的素分解就ok了。

mathematica 发表于 2008-12-24 21:02:13


判断素性不难。只要知道10^(4k+1)-1的素分解就ok了。

阁下难道不知道分解比素性判定要难得多????????
不过,费马数的素性判定确实是个例外!

无心人 发表于 2008-12-24 21:05:27

:)

这个素性判定也不是容易的啊
概率测试都难

gxqcn 发表于 2008-12-24 21:05:55

素分解比素性测试麻烦得多。

我写了段代码,// HugeCalcDemo.cpp : Defines the entry point for the console application.
//

// Project -> Setting -> C/C++ -> Code Generation --> Use run-time library:
//Win32 Debug:    Debug Multithreaded DLL
//Win32 Release:Multithreaded DLL

#include <iostream.h>

#include "../../../HugeCalc_API/CppAPI/Include/HugeCalc.h"    // 公共接口
#include "../../../HugeCalc_API/CppAPI/Include/HugeInt.h"    // 10进制系统
#include "../../../HugeCalc_API/CppAPI/Include/HugeIntX.h"    // 16进制系统

#pragma message("automatic link to ../../../HugeCalc_API/CppAPI/Lib/HugeCalc.lib" )
#pragma comment( lib, "../../../HugeCalc_API/CppAPI/Lib/HugeCalc.lib" )

int main(int argc, char* argv[])
{
    cout << "Call " << HugeCalc::GetVer() << endl << endl;

    if ( HC_LICENSE_NONE == HugeCalc::GetLicenseLevel())
    {
      cout << endl << "警告:您未通过 HugeCalc.dll 的许可认证!" \
            << endl << endl << "解决方案可选下列方案之一:" \
            << endl << "    一、请将本程序移动到“/CopyrightByGuoXianqiang/[../]”目录下运行;" \
            << endl << "    二、或请在 HugeCalc.chm 中进行注册(一劳永逸)。" \
            << endl << endl;
      system( "pause" );
      return (-1);
    }

    // 初始化
    HugeCalc::EnableTimer( TRUE );
    HugeCalc::ResetTimer();


    CHugeInt p(1);

    UINT32 count = 0;
    UINT32 i = 0;

    do
    {
      ++i;
      if (((--p).DecLShift( 4 ) += 9901).IsPrime())
      {
            cout << HugeCalc::GetTimerStr(FT_HHMMSS_ms) << "\tNo." << ++count;
            cout << "\t(9900)" << i << "+1 is a prime number!" << endl;
      }

#ifdef _DEBUG
      else if ( 0 == ( 0x3F & i ))
      {
            cout << HugeCalc::GetTimerStr(FT_HHMMSS_ms) << "\ti=" << i << endl;
      }
#endif

    } while ( i < 1000 );

    system( "pause" );
    return 0;
}可惜现在不敢耗用机器去寻找,等有空时再运行吧。

无心人 发表于 2008-12-24 21:06:09

#include <stdio.h>
#include <gmp.h>

int main(void)
{
mpz_t a;
int i = 0;
unsigned long t4 = 10000, t2s1 = 99;
mpz_init(a);
mpz_set_ui(a, 9901);
while (i <= 1000)
{
    i ++;
    if (mpz_probab_prime_p(a, 2))
      printf("\nPrime %d\n", i);
    mpz_mul_ui(a, a, t4);
    mpz_sub_ui(a, a, t2s1);
    if (i % 100 == 0)
      printf("Test %d\n", i);
}
mpz_clear(a);
return 0;
}

重新写的C代码做测试

无心人 发表于 2008-12-24 21:08:34

目前输出
E:\MinGW\MSYS\math>9901

Prime 1
Test 100

Prime 146
Test 200

Prime 230
Test 300
Test 400
Test 500
Test 600
Test 700

无心人 发表于 2008-12-24 21:17:17

Test 700
Test 800
Test 900
Test 1000
没低于1000的新的了

有兴趣的修改我程序
每隔一定范围,保存下结果
连续算10天以上估计能测试到10000
页: 1 [2] 3
查看完整版本: 9901素数!