求模数为k的数字

时间:2015-08-09 06:46:07

标签: algorithm data-structures

我给了一个数字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之间的所有数字更好的解决方案

1 个答案:

答案 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)。