本题考查找规律,类似此类问题建议寻找周期序列来理清自己的逻辑。
注意两条性质:
- 余数呈周期性变化,当除数为y时,余数从0到y-1,周期性变化,周期为y,注意第一个0不存在。周期性变化是1,。。。,y-1,0
- 除数为y,则余数小于y,而余数>=k,所以除数>k
思路:设除数为y:k+1 -> n,完整周期个数为n/y,每个周期内满足的被除数是y-k个;最后一个不完整周期是1 到 n%y,个数是n%y-k+1,
两种情况并不相同,是因为 0 出现在周期序列的最后一个元素,当k=0时,也是由于此,数量为n%y;
import java.util.Scanner; public class Main { public static void main(String[] args){ Scanner sc = new Scanner(System.in); while (sc.hasNext()) { long cnt = 0L; long n = sc.nextInt(); long k = sc.nextInt(); for(long y = k + 1; y <= n; y++){ int res = 0; res = (int) (n / y * (y - k)); if(n % y >= k) if(k != 0) res += n % y - k + 1; else res += n % y; cnt += res; } System.out.println(cnt); } } }