挑战无心人!!!!!!!!
无心人的发帖数量实在是太多了!为了遏制住他的发帖速度,建议他
在找出第四个9901素数之前不要
再发帖子!
也许根本就不存在第四个9901
素数,如果这样的话,他永远就不用发帖子了! :L
你狠
超过一万位的数字很难测试 *Primes> filter isPrime $ take 1000 $ map (1+) $ (iterate (\x -> x * 10000 + 9900) 9900)
测试用代码,目前没发现第四个,上千位的测试,代码很慢
懒得用GMP或者HugeCalc测试
C代码不如Haskell好写 9900*(1+10^4+..+10^4k)+1
=>
100*(10^(4k+1)-1)/101+1
=>
判断素性不难。只要知道10^(4k+1)-1的素分解就ok了。
判断素性不难。只要知道10^(4k+1)-1的素分解就ok了。
阁下难道不知道分解比素性判定要难得多????????
不过,费马数的素性判定确实是个例外! :)
这个素性判定也不是容易的啊
概率测试都难 素分解比素性测试麻烦得多。
我写了段代码,// 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;
}可惜现在不敢耗用机器去寻找,等有空时再运行吧。 #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代码做测试 目前输出
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 Test 700
Test 800
Test 900
Test 1000
没低于1000的新的了
有兴趣的修改我程序
每隔一定范围,保存下结果
连续算10天以上估计能测试到10000