回 帖 发 新 帖 刷新版面

主题:伤脑筋啊,大虾们帮忙!

(乘式还原)有乘法算式如下:
    0 0 0
   *  0 0       
-----------
  0 0 0 0
0 0 0 0
-----------
0 0 0 0 0

其中18个0的位置上全都是素数(2,3,5,7)请还原此算式。

回复列表 (共3个回复)

沙发

//可以编程实现
//在VC++中编译
#include<iostream>
using namespace std;
int check(int a)
{
int n;int z;
if(a<10000&&a>=1000)
{
n=4;int b[4],c=1000;z=n;
for(int i=0;i<4;i++)
{
b[i]=a/c;
a=a%c;
c=c/10;
}
for(i=0;i<4;i++)
{
if(b[i]!=2&&b[i]!=3&&b[i]!=5&&b[i]!=7)
{
n=0;
}

}


}
else if(a<100000&&a>=10000)
{
n=5;int b[5],c=10000; z=n;
for(int i=0;i<5;i++)
{
b[i]=a/c;
a=a%c;
c=c/10;
}
for(int j=0;j<5;j++)
{
if(b[j]!=2&&b[j]!=3&&b[j]!=5&&b[j]!=7)
{
n=0;
}

}
}
else n=0;
return (n);
}


void main()
{
int a[4]={2,3,5,7};int b[100];int c[100],n=0,m=0,high,low;
for(int i=0;i<4;i++)
for(int j=0;j<4;j++)
for(int k=0;k<4;k++)
{
b[n]=a[i]*100+a[j]*10+a[k];
n++;
};
{
for(int i=0;i<4;i++)
for(int j=0;j<4;j++)
{
c[m]=a[i]*10+a[j];
m++;
}
}
{
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
{
if(check(b[i]*c[j])==5)
{
high=c[j]/10;
low=c[j]%10;
if(check(high*b[i])==4&&check(low*b[i])==4)
{
cout<<"  "<<b[i]<<endl;
cout<<"   "<<c[j]<<endl;
cout<<"---------------"<<endl;
cout<<" "<<low*b[i]<<endl;
cout<<high*b[i]<<endl;
cout<<"---------------"<<endl;
cout<<b[i]*c[j]<<endl;
}
}
}
}
}


//运行结果只有一个是:

    7 7 5
   *  3 3       
-----------
  2 3 2 5
2 3 2 5
-----------
2 5 5 7 5

板凳

嗯,虽然不是很精炼, 但已经很清析可读, 不错!

3 楼

产生这几个质数的全排列,对下面三行进行判断,全是质数时返回。(可以用一个转码,转为四进制,因为有四个质数),比如,0表示0000,即2222,1就是0001,2223,这样,从0000增到0256,把这个十进制转为4进制,就是你要的质数排列了,(我是用指针,A[4]=[2,3,5,7],很好办的。检测就不必说了,对10取余。

我来回复

您尚未登录,请登录后再回复。点此登录或注册