Вы можете проанализировать саму функцию, а не использовать метод грубой силы. Глядя на вольфрама, должно быть какое-то условие, чтобы проверить, существует ли он. Глядя на первые 13 значений:
[0,1,2,2,0, -4, -8, -8,0,16,32,32,0]
Думаю, если вы посмотрите на
log2 (abs (f (n))) -> [-, 0,1,1,2,3,3, -, 4 , 5,5, -]
Логически упрощено до [0,1,1,2,3,3,4,5,5], игнорируя 0s.
Итак, мы есть образец. Я думаю, что это разрешимо таким образом, что:
Так что, если значение abs (num) является целым числом. Возможно быть частью шаблона. Затем нам нужно проверить значения, если они должны быть отрицательными или положительными.
Разбивка дальше: положительные значения [0,1,1,4,5,5,8,9,9, ... ] Отрицательные значения [2,3,3,6,7,7,10,11,11 ...]
Затем мы можем проверить, если n% 4 == 0 или (n-1)% 4 == 0. Если это правда и исходное значение положительно -> чем да, оно было сделано из f (n) Если ложно и исходное значение отрицательно -> также сделано из f (n)
в противном случае оно wasnt.
import numpy as np
def test(x):
if x == 0 or x == 1:
return True
if x == -1 or x == -2:
return False
val = np.log2(abs(x))
if val%1==0:
if(val%4 == 0 or (val-1)%4==0) and x >0:
return True
elif (val%4!=0 and (val-1)%4 != 0) and x <0:
return True
else:
return False
else:
return False
Я не даю никаких гарантий, что моя математика верна. Протестировал и, кажется, работает. Там могут быть некоторые математические ошибки.