无心人 发表于 2008-4-23 18:29:36

连续123456789组成的素数

求完全由123456789重复排列取前N位组成的素数
比如1234567891就是

可以断定,其末位必须是1或者7

无心人 发表于 2008-4-23 18:30:20

1234567891234567891234567891也是

无心人 发表于 2008-4-23 19:34:17

1234567891234567891234567891234567891234567891234567891234567891234567也是

无心人 发表于 2008-4-23 19:47:30

200位内无其他该类素数

kofeffect 发表于 2008-4-24 12:40:05

幻方及其他:娱乐数学经典名题
张景中

这本书中有这方面的论述

无心人 发表于 2008-4-24 14:09:13

:)

能把我这里没有的贴上来么》

kofeffect 发表于 2008-4-24 14:14:30

从整体是、来看,素数是一种无序的数,其中出现的数字是随机的,杂乱的,没有规律的。但是也有少数素数,恰恰是有1~9这9个数字或其一部分的顺序或逆序排列形成的,从而引起人们的兴趣与注意。数字以升序排列的素数有
23,67,89,4567,...,23456789,1234567891,...

1972年,Bowling Green大学的拉斐尔.芬克尔斯坦(Raphael Finkelstein)等人发现了一个28位的顺序数字素数:
1234567891234567891234567891

1978年,艾伦.凯赛尔(Allan Cassel)打破了这个记录,发现了一个由123456789重复达9次,最后以1234567结尾的长达70位的这样一个素数(这里我怀疑作者有笔误,应该是重复7次才对)
123456789(重复7次)....123457

这个记录至今无人能够打破。

这是节选书上的一段文字

kofeffect 发表于 2008-4-24 14:19:11

原帖由 无心人 于 2008-4-23 19:34 发表 http://images.5d6d.net/dz60/common/back.gif
1234567891234567891234567891234567891234567891234567891234567891234567也是

跟你这个结论一致:)

gxqcn 发表于 2008-4-24 14:47:14

快速搜索的源代码

这个问题相当于每次把数据在后面追加9个字符,与 HugeCalc 内部数据结构正好一致,
所以用 HugeCalc 中的 DecLShift() 函数,可以获得非常高的效率。

我写了一个代码,可以对楼主要求的两种类型的素数均可快速搜索,
机器强劲的朋友也许有望可打破当前的世界纪录:victory: :#include <stdlib.h>
#include <stdio.h>

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

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


int main( void )
{
#if 0
        const UINT32 tail = 234567891;
        CHugeInt test( 1 );
#else
        const UINT32 tail = 891234567;
        CHugeInt test( 1234567 );
#endif
        printf( "tail is '%u'\r\n", tail );

        HugeCalc::EnableTimer();
        HugeCalc::ResetTimer();
        UINT32 u32Repeat = 0;
        while( 1000 > ++u32Repeat )
        {
                test.DecLShift( 9 ) += tail;

                if ( test.IsPrime() )
                {
                        printf( "%s\trepeat=%u\tdigits=%u\tOK!\r\n", HugeCalc::GetTimerStr( FT_HHMMSS_ms ), u32Repeat, test.GetDigits() );
                }
                else if ( u32Repeat % 20 == 0 )
                {
                        printf( "%s\trepeat=%u\r\n", HugeCalc::GetTimerStr( FT_HHMMSS_ms ), u32Repeat );
                }
        }
        HugeCalc::EnableTimer( FALSE );

        return 0;
}运行数据如下:tail is '891234567'
00:00:00.001    repeat=7      digits=70       OK!
00:00:00.019    repeat=20
00:00:00.172    repeat=40
00:00:00.490    repeat=60
00:00:01.645    repeat=80
00:00:03.244    repeat=100
00:00:06.986    repeat=120
00:00:11.262    repeat=140
00:00:20.644    repeat=160
00:00:30.800    repeat=180
00:00:44.765    repeat=200
00:01:07.357    repeat=220
00:01:29.514    repeat=240
00:02:10.580    repeat=260
00:02:53.391    repeat=280
00:03:52.707    repeat=300

在 4 分钟内,已算到近 3000 位。

无心人 发表于 2008-4-24 14:58:24

回复8#

   国内的书多数抄袭国外的书,而且资料陈旧的很。
所以其结论不可信
页: [1]
查看完整版本: 连续123456789组成的素数