主题:伤脑筋啊,大虾们帮忙!
qingshi011
[专家分:0] 发布于 2002-11-20 21:16:00
(乘式还原)有乘法算式如下:
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个回复)
沙发
vvaw [专家分:0] 发布于 2002-11-21 15:36:00
//可以编程实现
//在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
板凳
LittleMud [专家分:440] 发布于 2002-11-26 12:11:00
嗯,虽然不是很精炼, 但已经很清析可读, 不错!
3 楼
00beiyan [专家分:960] 发布于 2005-06-28 01:26:00
产生这几个质数的全排列,对下面三行进行判断,全是质数时返回。(可以用一个转码,转为四进制,因为有四个质数),比如,0表示0000,即2222,1就是0001,2223,这样,从0000增到0256,把这个十进制转为4进制,就是你要的质数排列了,(我是用指针,A[4]=[2,3,5,7],很好办的。检测就不必说了,对10取余。
我来回复