อัลกอริทึมในการคำนวณระยะห่างระหว่างอำนาจ


9

เมื่อให้ coprime aคุณสามารถคำนวณa,

นาทีx,Y>0|ax-Y|

ที่นี่x,Yเป็นจำนวนเต็ม เห็นได้ชัดว่าการx=Y=0ให้คำตอบที่ไม่น่าสนใจ; โดยทั่วไปพลังเหล่านี้จะได้ใกล้แค่ไหน นอกจากนี้เราจะคำนวณการย่อขนาด x, yได้อย่างรวดเร็วได้x,Yอย่างไร?


6
คุณรู้หรือไม่ว่ามันคำนวณได้

1
หากคุณแก้ไขxมันเป็นเรื่องง่ายที่จะแสดงให้เห็นว่าสำหรับ minimizer Y{xเข้าสู่ระบบaเข้าสู่ระบบ,xเข้าสู่ระบบaเข้าสู่ระบบ}\} ที่ช่วยลดการค้นหาแบบหนึ่งมิติ
โทมัส

5
โปรดอย่าข้ามโพสต์พร้อมกันหรืออย่างน้อยลิงค์ไปยังโพสต์อื่น mathoverflow.net/questions/283903/…
usul

คำตอบ:


-2

ครั้งแรกฉันคิดว่ามันจะเป็นการดีที่สุดที่จะใช้เศษส่วนต่อเนื่องของและทดสอบที่คอนเวอร์เจนท์ของมันเพราะที่คอนเวอร์เจนต์นั้นมีจุดในแง่ที่เหมาะสมที่สุด หลังจากนั้นจะกลายเป็นชัดเจนว่าต้องมีการใช้อย่างน้อยเศษส่วนต่อเนื่องทั่วไปเพื่อให้แน่ใจว่ามีระยะทางลดลง monotonic หลังจากนั้นและอัลกอริธึมที่ซับซ้อนด้วยอัลโก้พลังเดรัจฉานต่อไปนี้ยิ่งเร็วกว่าใน Pari / GPเข้าสู่ระบบ(a)/เข้าสู่ระบบ()(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 
       );
   )); }

หลังจากการโทรนั้นmylist(100,1000,3,3,100)เพื่อค้นหาความแตกต่างเล็ก ๆ ทั้งหมดด้วยที่ทั้งสองยกกำลังอย่างน้อยสำหรับฐานทั้งหมดและ1000 ตรวจสอบเท่านั้นถึงและ\ |d|<1003a=2..100=(a+1)..1000สูงสุด(X)=30สูงสุด(Y)=20

นี่เป็นวิธีที่เร็วกว่าวิธีเศษส่วนต่อเนื่อง (ซึ่งมีปัญหาที่ไม่เมตตา (เช่นความสมบูรณ์ของโซลูชั่น) ซึ่งยากต่อการจัดการ) แม้ว่ามันจะเป็นเรื่องไร้สาระก็ตาม ...

โปรโตคอล (สั่งด้วยตนเอง):

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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.