一道不定方程

jp1984 2004-12-26 04:53:10
是一本趣味数学上的题目,最后化成一个不定方程组
x^2+y^2+z^2 = a^3 …… (1)
x^3+y^3+z^3 = b^2 …… (2)
要求x,y,z,a,b是整数,且,x,y,z不相同
怎么求通解????
我手工找到一组x=y=z的解,x=y=z=3 ,a= 3,b=9

(1)的解单独容易构造,怎么才能和(2)联立呢?
解得(1)后 再写程序求解,复杂度还是O(n^4) ,昨天算了两三分钟,干脆放弃了。

我的意思是不是程序求解,而且纯粹的数学求解。
谢谢。
...全文
217 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
jp1984 2005-01-04
  • 打赏
  • 举报
回复
最后两天,还有没有人能提供其他的思路?
mathe 2005-01-04
  • 打赏
  • 举报
回复
其中解:x=252,y=234,z=198比较有意思,x,y,z都不相同,而且挺小的。
mathe 2005-01-04
  • 打赏
  • 举报
回复
通解我还是觉得不容易,不过可以提供一种方法,可以更快的找到更多的解:
如果
x0^2+y0^2+z0^2=u*v^2*t^3 (3)
x0^3+y0^3+z0^3=u*w^2 (4)
那么
x=x0*uv^2,y=y0*uv^2,z=z0*uv^2
是原方程的一个解。
而同时满足(3),(4)的解非常之多。
比如选择1<=z0<=y0<=x0<50,我们可以得到32个解。
x0=1,y0=1,z0=1,u=3,v=1,t=1,w=1,x=3,y=3,z=3
x0=3,y0=3,z0=3,u=1,v=1,t=3,w=9,x=3,y=3,z=3
x0=4,y0=4,z0=4,u=3,v=4,t=1,w=8,x=192,y=192,z=192
x0=8,y0=8,z0=8,u=6,v=2,t=2,w=16,x=192,y=192,z=192
x0=9,y0=9,z0=9,u=3,v=9,t=1,w=27,x=2187,y=2187,z=2187
x0=10,y0=9,z0=5,u=206,v=1,t=1,w=3,x=2060,y=1854,z=1030
x0=12,y0=12,z0=12,u=1,v=4,t=3,w=72,x=192,y=192,z=192
x0=13,y0=12,z0=5,u=2,v=13,t=1,w=45,x=4394,y=4056,z=1690
x0=14,y0=13,z0=11,u=2,v=3,t=3,w=56,x=252,y=234,z=198
x0=15,y0=12,z0=9,u=2,v=15,t=1,w=54,x=6750,y=5400,z=4050
x0=16,y0=16,z0=16,u=3,v=2,t=4,w=64,x=192,y=192,z=192
x0=19,y0=13,z0=12,u=674,v=1,t=1,w=4,x=12806,y=8762,z=8088
x0=20,y0=18,z0=10,u=103,v=1,t=2,w=12,x=2060,y=1854,z=1030
x0=24,y0=24,z0=24,u=2,v=2,t=6,w=144,x=192,y=192,z=192
x0=25,y0=25,z0=25,u=3,v=25,t=1,w=125,x=46875,y=46875,z=46875
x0=26,y0=24,z0=10,u=1,v=13,t=2,w=180,x=4394,y=4056,z=1690
x0=27,y0=24,z0=7,u=1354,v=1,t=1,w=5,x=36558,y=32496,z=9478
x0=27,y0=27,z0=27,u=1,v=9,t=3,w=243,x=2187,y=2187,z=2187
x0=28,y0=26,z0=22,u=1,v=3,t=6,w=224,x=252,y=234,z=198
x0=30,y0=15,z0=15,u=6,v=15,t=1,w=75,x=40500,y=20250,z=20250
x0=30,y0=24,z0=18,u=1,v=15,t=2,w=216,x=6750,y=5400,z=4050
x0=32,y0=32,z0=32,u=6,v=1,t=8,w=128,x=192,y=192,z=192
x0=33,y0=31,z0=20,u=2,v=35,t=1,w=192,x=80850,y=75950,z=49000
x0=34,y0=34,z0=17,u=1,v=51,t=1,w=289,x=88434,y=88434,z=44217
x0=36,y0=36,z0=36,u=3,v=36,t=1,w=216,x=139968,y=139968,z=139968
x0=38,y0=26,z0=24,u=337,v=1,t=2,w=16,x=12806,y=8762,z=8088
x0=40,y0=36,z0=20,u=206,v=4,t=1,w=24,x=131840,y=118656,z=65920
x0=42,y0=28,z0=14,u=14,v=14,t=1,w=84,x=115248,y=76832,z=38416
x0=42,y0=39,z0=33,u=6,v=1,t=9,w=168,x=252,y=234,z=198
x0=45,y0=36,z0=27,u=6,v=5,t=3,w=162,x=6750,y=5400,z=4050
x0=48,y0=48,z0=48,u=1,v=2,t=12,w=576,x=192,y=192,z=192
x0=49,y0=49,z0=49,u=3,v=49,t=1,w=343,x=352947,y=352947,z=352947

#include <stdio.h>
#include <math.h>
#define N 50
#define MAX_PRIME (3*N*N*N)
int c3[N];
int c2[N];
int not_prime[MAX_PRIME];
#define L (3000) //L must be more than sqrt(MAX_PRIME)
#define IS_PRIME(x) (!not_prime[x])
void init_prime(){
int i;
not_prime[0]=not_prime[1]=1;
for(i=2;i<L;i++){
if(IS_PRIME(i)){
int j;
for(j=i+i;j<MAX_PRIME;j+=i)not_prime[j]=1;
}
}
}

void init(){
int i,i2,i3;
for(i=1;i<N;i++){
i2=i*i;
i3=i2*i;
c2[i]=i2;
c3[i]=i3;
}
init_prime();
}

int odd_order_prime(int x)
{
int r=1;
int i;
for(i=2;i<=x;i++){
if(IS_PRIME(i)){
int xcount=0;
while(x%i==0){
x/=i;xcount++;
}
if(xcount&1)r*=i;
}
}
return r;
}

int no_single_order_prime(int x,int *v,int *t){
int r=1;
int i;
*v=1,*t=1;
for(i=2;i<=x;i++){
int xcount=0;
while(x%i==0){
x/=i;xcount++;
}
if(xcount==1)return 0;
if(xcount>1){
int m=0,n,h;
n=(xcount-2)/3;
xcount-=3*n;
if(xcount==2)m=1;
else if(xcount==3)n++;
else if(xcount==4)m=2;
for(h=0;h<m;h++)*v *= i;
for(h=0;h<n;h++)*t *= i;
}
}
return 1;
}

int main()
{
int x,y,z;
init();
for(x=1;x<N;x++)for(y=1;y<=x;y++)for(z=1;z<=y;z++){
int s2,s3,u,v,t,uv2;
s2=c2[x]+c2[y]+c2[z];
s3=c3[x]+c3[y]+c3[z];
u=odd_order_prime(s3);
if(s2%u!=0)continue;
if(no_single_order_prime(s2/u,&v,&t)){
uv2=u*v*v;
printf("x0=%d,y0=%d,z0=%d,u=%d,v=%d,t=%d,w=%d,x=%d,y=%d,z=%d\n",x,y,z,u,v,t,(int)sqrt(s3/u),x*uv2,y*uv2,z*uv2);
}
}
}
jp1984 2005-01-03
  • 打赏
  • 举报
回复
mathe的观点也许代表大多数人的意见,并不是我钻牛角尖,我只想觉得纯粹理论比完全的借助计算机解决更激动人心。 我还找到了一个答案,那就是所有关于零对称的两个互为相反数的整数 满走方程组。不过看mathe后面找到的解(正确性我还没验证),这个性质看样子也不并不是通解。

也许这道题初等找不到解法,可能通解也无法用代数形式表达。


还有没有人能提供其他的思路???
mathe 2005-01-02
  • 打赏
  • 举报
回复
求得部分解就不错了吗:)
不满足a=p^2+q^2+r^2, x=pa,y=qa,z=ra的解也很多。
不一定所有的问题都可以完全用纯粹理论的方法完全解决的,没有必要花那么多时间到这种问题上取。
jp1984 2005-01-01
  • 打赏
  • 举报
回复
快沉下去了,这几天也花了一点时间去想这个题目 。好象还是觉得代数变形太灵活了,有没有什么稍微死板点的方法啊? 这方面有没有什么现成的定理什么!!
大家新年好~
jp1984 2004-12-30
  • 打赏
  • 举报
回复
两天忙着考试, 没来看这道题。。。

mathe的解答应该只是求得了部分解,因为x,y,z还可能是负整数 。谢谢你的代码,很有帮助。

对方程(1)求部分解是很容易的,只要设a = p^2+q^2+r^2 ,则x=pa,y=qa,z=ra...
但是纯粹代数的方法好象找不到第2个方程的解。。

baryjim 说运用球面坐标,我也想过这种解析的方法来求,但是这个题目的要求是x,y,z是整数,无论怎样也没有必要参数代换。
pick 2004-12-28
  • 打赏
  • 举报
回复
你可以找一本初等数论的书查一下
应该有解法的
mathe 2004-12-27
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <math.h>
#define LIMIT 1000
#ifdef _WIN32
typedef __int64 longlong;
#else
typedef long long longlong;
#endif

longlong nsqr[LIMIT];
longlong ncube[LIMIT];

void init(){
int i;
for(i=0;i<LIMIT;i++){
longlong s=(longlong)i*i;
nsqr[i]=s;
s*=i;
ncube[i]=s;
}
}

int issqr(longlong x){
longlong s=(longlong)sqrt(x);
while(s*s<x)s++;
if(s*s==x)return s;
return 0;
}

int iscube(longlong x){
longlong s=(longlong)pow(x,1.0/3.0);
while(s*s*s<x)s++;
return s*s*s==x;
}

int main()
{
int i,j,k;
init();
for(i=2;i<LIMIT;i+=2)for(j=1;j<LIMIT;j+=2)for(k=j;k<LIMIT;k+=2){
longlong s1=nsqr[i]+nsqr[j]+nsqr[k];
longlong s2=ncube[i]+ncube[j]+ncube[k];
int u1,u2;
s1/=2;s2/=2;
if((u1=issqr(s1))&&(u2=issqr(s2))){
longlong x,y,z;
longlong U=s1*2;
x=i*U;
y=j*U;
z=k*U;
#ifdef _WIN32
printf("%I64d,%I64d,%I64d\n",x,y,z);
#else
printf("%lld,%lld,%lld\n",x,y,z);
#endif
}
}
}

mathe 2004-12-27
  • 打赏
  • 举报
回复
利用方程
x0^2+y0^2+z0^2=2u^2
x0^3+y0^3+z0^3=2v^2
的解,
那么
x=2u^2x0,y=2u^2y0,z=2u^2z0
肯定是原方程的解。
然后可以用计算机搜索到下列解:
4056,1690,4394
5400,4050,6750
49000,75950,80850
887112,2587410,2735262
1812608,1274490,4219978
1258712,1076530,1341522
3303344,3941490,5142706
6154544,11539770,13078406
2956824,1232010,3203226
3936600,2952450,4920750
5806304,6894986,7620774
2587464,646866,646866
49130000,8308750,211331250
49130000,124631250,170871250
117109736,322051774,614826114
13111800,11178650,17230250
144152400,278866250,730200550
35721000,55367550,58939650
7264696,270494,2202594
176212200,314755850,360724250
63375000,26406250,68656250
84375000,63281250,105468750
44652128,6609690,33635978
61132656,4898450,61328594
646704648,1886221890,1994005998
165273320,173536986,239646314
205770000,60016250,214343750
765625000,1186718750,1263281250
131363568,12771458,16941730
423612000,18911250,503039250
477184344,198826810,516949706
635304600,476478450,794130750
275634128,54142418,103362798
448281008,168105378,280175630
917601048,784790370,977969538
1001127600,87219450,1004919750
baryjim 2004-12-26
  • 打赏
  • 举报
回复
x^2+y^2+z^2 = a^3

可以用球面坐标来代替X,Y,Z啊!然后就可以带入(2)中!^_^

33,027

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧