如果您添加或減去兩個數字的 GCD,我想找到一個數字(輸入 2 個數字)是最大數字的倍數,同時是最小數字的倍數。換句話說:
val%max(x,y)==0 and ((val-gdc(x,y))%min(x,y)==0 or (val gdc(x,y))%min(x,y)==0)
例如:如果我有 4 和 7,則值將是 7,因為它是 7 的倍數,如果加 1(即 7 和 4 的 gcd)它變為 8,即 4 的倍數我需要一個如果可能的話不使用回圈的解決方案,因為我的解決方案確實有效,但是對于大數字來說非常慢:
from math import gcd
x,y=map(int,input().split())
def fun(x,y):
big=max(x,y)
small=min(x,y)
d=gcd(x,y)
val=big
while (val d)%small!=0 and (val-d)%small!=0:
val =big
return val
val=fun(x,y)
print(val)
uj5u.com熱心網友回復:
這是一個不使用回圈的解決方案。我已經將它與高達 10,000 位的數字進行了基準測驗,并且它仍在亞秒級時間內運行。
from math import gcd
def solve(n, m):
n, m = max(n, m), min(n, m)
d = gcd(n, m)
p, q = n//d, m//d
a = pow( p, -1, q)
b = pow(-p, -1, q)
return n * min(a, b)
在極少數情況下,它將給出不同(但仍然正確)的解決方案 - 當兩者都是有效的解決方案時回傳0(n更大的數字)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/511533.html
標籤:Python数学
上一篇:使用恒星大小和溫度確定宜居帶JS
下一篇:如何生成亂數學運算子
