一道数论题
我们知道如下等式3^2-2^3=1
3^3-5^2=2
2^8-5^3=3
现在,我提出一个2问题,不知能否解决。
1.对于一个给定的小的正整数c,满足不定方程$a^m-b^n=c$且a>1,b>1,m>1,n>1,的整数解(a,b,m,n)是有限的。
2.如果能够证明1,可否有出求方程1的解的通过算法。
注:
1. 或许(1)中的方程不能叫做不定方程,因为其指数也是未知数。
2. 对于c=1,在a和b的素因子不超过某个数的情况下,其解是有限的,它是Stormer's theorem的一个特例,见http://en.wikipedia.org/wiki/St%C3%B8rmer%27s_theorem 这种数确实很少。
我扫描了$2^50$以内的乘方数(若 $n=i ^ e$, (i,e是整数,且i>1,e>1)则称n是乘方数),检查相邻2个数之间的差,若<=16,则输出。结果为
c=
9-8=1 9=3^2 8=2^3
c=
27-25=2 27=3^325=5^2
c=
128-125=3 128=2^7 125=5^3
c=
8-4=4 8=2^3 4=2^2
36-32=4 36=6^232=2^5
125-121=4 125=5^3 121=11^2
c=
32-27=5 32=2^527=3^3
c=
16-9=716=2^49=3^2
32768-32761=7 32768=2^15 32761=181^2
c=
97344-97336=8 97344=312^2 97336=46^3
c=
25-16=9 25=5^216=2^4
225-216=9 225=15^2 216=6^3
64009-64000=9 64009=253^2 64000=40^3
c=
2197-2187=10 2197=13^3 2187=3^7
c=
3136-3125=11 3136=56^2 3125=5^5
3375-3364=11 3375=15^3 3364=58^2
c=
2209-2197=12 2209=47^2 2197=13^3
c=
49-36=13 49=7^236=6^2
256-243=13 256=2^8 243=3^5
4913-4900=13 4913=17^3 4900=70^2
c=
64-49=15 64=2^649=7^2
1295044-1295029=15 1295044=1138^21295029=109^3
c=
144-128=16 144=12^2 128=2^7 对于比较小的c值,通常取m/n~~ln(b)/ln(a)
可以用连分数来逼近m/n的值,这样更容易搜到解 有道理 给出求渐进连分数的代码,方便自己和别人参考。#include "stdafx.h"
#include "math.h"
typedef int BASE_INT_TYPE;
typedef __int64 DOUBLE_INT_TYPE;
typedef struct _base_pair
{
DOUBLE_INT_TYPE p;
DOUBLE_INT_TYPE q;
}BASE_PAIR;
typedef struct _base_pair_3e
{
BASE_PAIR d;
}BASE_PAIR_3E;
void continued_frac_serial(double f)
{
BASE_INT_TYPE a;
BASE_PAIR_3E pqs;
double cf,tf;
int i;
tf=f;
pqs.d.p=a=(BASE_INT_TYPE)(tf);
pqs.d.q=1;
cf=(double)(pqs.d.p)/(double)(pqs.d.q);
printf("\nf=%.16f\n:%I64d/%I64d=%.16f\n",f,pqs.d.p,pqs.d.q,cf);
tf -= a;
tf=1.0/tf;
for (i=1;1;i++)
{
a= (BASE_INT_TYPE)(tf);
tf -= a;
tf=1.0/tf;
if (i==1)
{
pqs.d.p = pqs.d.p * a +1; //p1=a0 * a1+1
pqs.d.q = a; //q1=a1
cf=(double)(pqs.d.p)/(double)(pqs.d.q);
}
else
{
pqs.d.p= pqs.d.p * a +pqs.d.p;//p= a * p + p;
pqs.d.q= pqs.d.q * a +pqs.d.q;//q= a * q + q;
cf=(double)(pqs.d.p)/(double)(pqs.d.q);
}
printf("[%d]:%I64d/%I64d=%.16f\n",i,pqs.d.p,pqs.d.q,cf);
if ( fabs(cf-f) < f * 2.3e-16)
{
break;
}
a=a;
if (i>=2)
{
pqs.d.p=pqs.d.p;
pqs.d.q=pqs.d.q;
pqs.d.p=pqs.d.p;
pqs.d.q=pqs.d.q;
}
}
}
void test1()
{
double f;
f=3.1415926535897932384626433832795;
continued_frac_serial(f);
f=log(3.0)/log(2.0); continued_frac_serial(f);
f=log(5.0)/log(2.0); continued_frac_serial(f);
}
int _tmain(int argc, _TCHAR* argv[])
{
test1();
return 0;
} https://en.wikipedia.org/wiki/Catalan%27s_conjecture
这好像是个没有解决的问题
页:
[1]