我给了一个数字A 1<=A<=10^6
和一个数字K.我必须找到1到A之间的所有数字A%i==k
而我是1<=i<=A
。有没有比循环更好的解决方案
简单解决方案
for(int i=1;i<=A;i++)
if(A%i==k) count++;
有没有比迭代1到A之间的所有数字更好的解决方案
答案 0 :(得分:1)
对于A % i == k
的任何整数值,表达式A == n * i + k
相当于n
,在所述范围内的值为A
。
这可以重新排列为n * i = A - k
,并且可以通过查找A - k
的所有因子i
(其中k < i <= A
)来解决。
以下是几个例子:
A = 100, k = 10
F = factor_list(A-k) = factor_list(90) = [1,2,3,5,6,9,10,15,18,30,45,90]
(discard all factors less than or equal to k)
Result: [15,18,30,45,90]
A = 288, k = 32
F = [2,4,8,16,32,64,128,256]
Result: [64,128,256]
如果A - k
是素数,则有一个解决方案(A-k
)或无解决方案(如果A-k <= k
)。