〇〇 发表于 2009-8-21 19:09:02

仅130就很多

         N
------------
13062847597
13072814569
13054728691
13086497257
13042589687
13052887649
13089562847
13029568477
13058922467
13054267189
13062845977
13028649587
13068541279
13071265849
13012874569
13021948657
13042876559
13029487651
13048659287
13024258697
13024859761
13096485217
13021475869
13085682749
13094267581
13049262587
13048252967
13074958627
13096572847
13028614579
13042256879
13042625987
13087267549
13029268547
13048965827
13028956471
13069285247
13048576259
13049685527
13059278641
13024875967
13048725869
13057162849
13068295547
13067284597

282842712474 发表于 2009-8-21 20:54:06

添加多一个限制:
18开头,3结尾

〇〇 发表于 2009-8-22 09:01:11

12# 282842712474


如果你没有算过,估计还是很多,你看130...7的个数就能猜到

medie2005 发表于 2009-8-22 09:04:45

我算过了,仅189...3这种形式的就有1426个.

〇〇 发表于 2009-8-22 11:29:31

你用什么工具算的?

medie2005 发表于 2009-8-22 13:00:50

#include <iostream>
#include <windows.h>

using namespacestd;

int count=0;

int prime[]={
};

intHash;

void Init(){
        for( int i=0; i<sizeof(prime)/sizeof(prime); ++i ){
                Hash%10000][++Hash%10000]]=prime;
        }
}

intmain()
{
        int time=GetTickCount();
        Init();
        __int64T=100000, f=10, lowbound=T*T, upbound=T*T*f;
        int i, j;
        for( i=1; i<10000; i+=2 ){
                for( j=i; j<10000; j+=2 ){
                        if( (i%2==0 || i%5==0 || j%2==0 || j%5==0) )
                        ;
                        else{
                                int k=(i*j)%10000;
                                if( k%10==3 ){
                                int dig;
                                int hash={0,0,0,0,0,0,0,0,0,0};
                                for( int g=0; g<4; ++g ){                                       
                                        dig=k%10;
                                //        cout<<dig<<endl;
                                        hash]++;
                                        k/=10;
                                }                       
                                for( g=0; g<10; ++g )
                                        if( hash>2 ) break;
                                if( g==10 ){
                                        int t1, t2;
                                        for( t1=1; t1<Hash; ++t1 ){
                                                for( t2=1; t2<Hash; ++t2 ){
                                                        __int64 temp1=Hash, temp2=Hash, s=temp1*temp2, temp=s;
                                                        //printf("s====%I64d\n",s);
                                                        if( temp>lowbound &&temp<upbound ){
                                                                int digx={0,0,0,0,0,0,0,0,0,0};
                                                                while( temp ){
                                                                        digx++;
                                                                        temp/=10;
                                                                }
                                                                int twice=0;
                                                                for( int h=0; h<10; ++h ){
                                                                        if( digx==1 ) continue;
                                                                        if( digx==2 ) twice++;
                                                                        if( twice>2 ) break;
                                                                        if( digx!=1 && digx!=2 ) break;
                                                                }
                                                                if( h==10 ){
                                                                        if( s/100000000==189 )//|| s/1000000000==15 || s/1000000000==18 )
                                                                        printf("%d : %I64d\n",++count, s);
                                                                }
                                                        }
                                                }
                                        }
                                        //        ++count;//cout<<"("<<i<<","<<j<<")\n";
                                }
                                }
                        }
                }
        }
        cout<<"time : "<<GetTickCount()-time<<" ms\n";
        //cout<<count<<endl;
        //cout<<sizeof(prime)/4<<endl;
        return 0;
}

282842712474 发表于 2009-8-22 14:03:19

189...3这种形式的就有1426个.
这1426个都可以分解为两个不小于10000的素数相乘吗?

当然,如果逐个分解,运算量是大了点,但是感觉上用计算机分解一个11位数不用多久时间

〇〇 发表于 2009-8-22 15:16:54

186 188 189一共
3203 rows selected.

282842712474 发表于 2009-8-22 15:44:46

本帖最后由 282842712474 于 2009-8-22 18:03 编辑

189开头,43结尾,其中一个素数是5位数,11个数字分别为:01123456789

medie2005 发表于 2009-8-22 17:28:42

18952746103 == 1050421 * 18043
18910645723 == 480661 * 39343
18920617453 == 774071 * 24443
18967250413 == 34543 * 549091
18960541723 == 1045061 * 18143
18956041723 == 276961 * 68443
页: 1 [2] 3 4 5 6 7 8 9
查看完整版本: 猜猜我的手机号码?