整数x、y、およびnの場合、(xとyのみが指定されます)x n = yかどうかをテストしますか?x = 8、y = 512の場合、n = 3であるため、これは真です。ただし、x=8およびy=500の場合、nは約2.98(整数ではない)である必要があるため、ステートメントはfalseと評価されます。このテストを行うには、対数を使用するのが最善の方法ですか?
ある整数が別の整数の累乗であるかどうかを確認すると、いくつかの解決策が提供されます。
int n = y; while(n < x) n *= y; return n == x
、
while (x%y == 0) x = x / y
return x == 1
および対数法(これは私のバージョンです):
return ((log(y, x) % 1) == 0) // log(expression, base)
log(y、x)= log x y
特に大きな数の場合、どちらの方法がより速く評価されますか?