Thuật toán tính khoảng cách giữa các quyền hạn


9

Cho trước thời hạn , bạn có thể tính nhanha,b

minx,y>0|axby|

Ở đây là các số nguyên. Rõ ràng việc lấy x = y = 0 đưa ra một câu trả lời không thú vị; nói chung làm thế nào gần những sức mạnh này có thể có được? Ngoài ra, làm thế nào để chúng ta nhanh chóng tính toán thu nhỏ x, y ?x,yx=y=0x,y


6
Bạn có biết rằng điều đó thậm chí có thể tính toán được không?

1
Nếu bạn sửa x , thật dễ dàng để chỉ ra rằng, đối với trình thu nhỏ, y{xlogalogb,xlogalogb} . Điều đó làm giảm nó thành một tìm kiếm một chiều.
Thomas

5
Vui lòng không đồng thời đăng chéo hoặc ít nhất là liên kết đến (các) bài đăng khác. mathoverflow.net/questions/283903/ từ
usul

Câu trả lời:


-2

Đầu tiên tôi nghĩ tốt nhất nên sử dụng phần tiếp theo của và kiểm tra tại các điểm hội tụ của nó, bởi vì tại đó hội tụ có các điểm trong một số xấp xỉ tối ưu. Sau đó, mọi thứ trở nên rõ ràng, người ta cần sử dụng ít nhất các phân số tiếp tục tổng quát để đảm bảo có khoảng cách giảm đơn điệu. Sau đó và thuật toán phức tạp với thuật toán vũ phu sau đây thậm chí còn nhanh hơn trong Pari / GPlog(a)/log(b)(x,y)

\\ print X,Y,d conditional X>lowboundX, Y > lowboundY, d<upperboundD
{pri1(lbX,lbY,ubd,a,b,X,Y,d)=if(X<lbX || Y<lbY || abs(d)>ubd,return(0)); 
                  print(a,"^",X,"-",b,"^",Y,"=",d)); }


{mylist(maxa=19,maxb=99,lbX=3,lbY=2,ubd=100)=print(" ");
for(a=2,maxa,for(b=a+1,maxb,
     if(gcd(a,b)>1,next()); \\ ignore trivial multiples
     X=1;Y=1;Xa=a;Yb=b;
     d=Xa-Yb;  pri1(lbX,lbY,ubd,a,b,X,Y,d);
     for(k=1,20, 
        while(d<0,Xa*=a;d=Xa-Yb;X++;pri1(lbX,lbY,ubd,a,b,X,Y,d););
        while(d>0,Nb*=b;d=Xa-Yb;Y++;pri1(lbX,lbY,ubd,a,b,X,Y,d););
        if(X>30 || Y>20, break());  \\ stop at max X=30 or Y=20 
       );
   )); }

sau cuộc gọi đó mylist(100,1000,3,3,100)để tìm tất cả sự khác biệt nhỏ với trong đó cả hai số mũ đều có ít nhất cho tất cả các cơ sở và . Chỉ kiểm tra và . |d|<1003a=2..100b=(a+1)..1000max(X)=30max(y)=20

Cách này nhanh hơn nhiều so với cách tiếp cận phân đoạn tiếp tục (cũng có nhiều vấn đề không tốt (ví dụ như tính đầy đủ của các giải pháp) rất khó xử lý) mặc dù đó là một thuật toán ngây thơ ...

Một giao thức (được đặt hàng thủ công):

gettime();mylist(200,10 000,3,3,100);gettime() /1000.0 \\ ~ a*b/6000 sec
  (400 sec)

 2^8- 3^5= 13

 6^7-23^4= 95
 2^7- 3^4= 47

 2^7- 5^3=  3
 2^5- 3^3=  5
 3^4- 4^3= 17

---------------
 2^6- 3^4=-17

 3^5- 4^4=-13
 2^5- 3^4=-49

 2^8- 7^3=-87
(4^4- 7^3=-87)

 3^7-13^3=-10
 2^6- 5^3=-61
(4^3- 5^3=-61)
 2^5- 5^3=-93

 2^4- 3^3=-11
 3^4- 5^3=-44
 6^4-11^3=-35
15^4-37^3=-28

 3^3- 4^3=-37
 3^3- 5^3=-98
 5^3- 6^3=-91
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.