自然数有N个,你需要找到模差为m的倍数的两个数。
请告诉我解决这个问题的算法。没有什么比一个完整的枚举更好的了。虽然从剩菜开始可能值得。
自然数有N个,你需要找到模差为m的倍数的两个数。
请告诉我解决这个问题的算法。没有什么比一个完整的枚举更好的了。虽然从剩菜开始可能值得。
解释:有一个自然数x,它可以表示为两个自然数m和n(x=m*n)的乘积。接下来x,您需要用m+n-2(x=m+n-2) 替换。所有这一切都必须完成,直到x它变得平等1
x可能高达十亿
示例:程序收到数字 6。
6=3*2 3+2-2=3
6=6*1 6+1-2=5
3=3*1 3+1-2=2
5=5*1 5+1-2=4
2=2*1 2+1-2=1 - x=1, останавливаемся (до единицы мы дошли за 3 замены)
4=2*2 2+2-2=2
我的尝试
from math import sqrt
def isint(n):
return not(n%1)
def f(n):
count = 0
while(True):
x=sqrt(n)
if(n<=1):
return count
if(isint(x)):
n=x+x-2
else:
x=int(x)
while(isint(n/x)==False):
x=x-1
if(x<=0):
return count
n=int((n/x)+x-2)
count+=1
print('Минимальное кол-во попыток для числа 6 = ',f(6))
PS我的算法出错了,但还是算了一些数字
例如,从数字 24 你需要得到 [[6,4],[12,2],[3,8],[1,24]]