- 注册时间
- 2007-12-27
- 最后登录
- 1970-1-1
- 威望
- 星
- 金币
- 枚
- 贡献
- 分
- 经验
- 点
- 鲜花
- 朵
- 魅力
- 点
- 上传
- 次
- 下载
- 次
- 积分
- 3751
- 在线时间
- 小时
|
发表于 2009-8-22 13:00:50
|
显示全部楼层
- #include <iostream>
- #include <windows.h>
-
- using namespace std;
-
- int count=0;
-
- int prime[]={
- };
-
- int Hash[10000][200];
-
- void Init(){
- for( int i=0; i<sizeof(prime)/sizeof(prime[0]); ++i ){
- Hash[prime[i]%10000][++Hash[prime[i]%10000][0]]=prime[i];
- }
- }
-
- int main()
- {
- int time=GetTickCount();
- Init();
- __int64 T=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[4];
- int hash[10]={0,0,0,0,0,0,0,0,0,0};
- for( int g=0; g<4; ++g ){
- dig[g]=k%10;
- // cout<<dig[g]<<endl;
- hash[dig[g]]++;
- k/=10;
- }
- for( g=0; g<10; ++g )
- if( hash[g]>2 ) break;
- if( g==10 ){
- int t1, t2;
- for( t1=1; t1<Hash[i][0]; ++t1 ){
- for( t2=1; t2<Hash[j][0]; ++t2 ){
- __int64 temp1=Hash[i][t1], temp2=Hash[j][t2], s=temp1*temp2, temp=s;
- //printf("s====%I64d\n",s);
- if( temp>lowbound && temp<upbound ){
- int digx[10]={0,0,0,0,0,0,0,0,0,0};
- while( temp ){
- digx[temp%10]++;
- temp/=10;
- }
- int twice=0;
- for( int h=0; h<10; ++h ){
- if( digx[h]==1 ) continue;
- if( digx[h]==2 ) twice++;
- if( twice>2 ) break;
- if( digx[h]!=1 && digx[h]!=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;
- }
复制代码 |
|