zoukankan      html  css  js  c++  java
  • 数对

    题目

    牛牛以前在老师那里得到了一个正整数数对 (x, y),牛牛忘记他们具体是多少了。
    但是牛牛记得老师告诉过他 x 和 y 均不大于 n,并且 x 除以 y 的余数大于等于 k。

    牛牛希望你能帮他计算一共有多少个可能的数对。

    输入描述

    输入包括两个正整数 n, k (1 <= n <= 10 ^ 5, 0 <= k <= n - 1)。

    输出描述

    对于每个测试用例,输出一个正整数表示可能的数对数量。

    样例输入

    5 2

    样例输出

    7

    AC 代码

    import java.util.Scanner;
    
    public class Main {
    
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            long n = scanner.nextLong(), k = scanner.nextLong();
            if (k == 0) {
                System.out.println(n * n);
            } else {
                long count = 0;
                /**
                 * 固定 y, 找 x
                 * x / y >= k, 说明 y > k
                 */
                for (long y = k + 1; y <= n; y++) {
                    // 假设 n = a * y + b
                    // 在每个长度为 y 的区间里只有 y-k 个数模 y 余数 >= k
                    count += n / y * (y - k);
                    long tem = n % y;
                    // 考虑 n % y 是否大于等于 k
                    if (tem >= k)
                        count += tem - k + 1;
                }
                System.out.println(count);
            }
        }
    }
    
  • 相关阅读:
    display:flex 布局之 骰子
    vue 生命周期
    vue webpack 懒加载
    后台管理页面基本布局
    模拟ie9的placeholder
    常用的功能封装 pool.js
    六位数字字母验证码
    CommonJs AMD CMD
    项目封版后的总结
    jq 回到顶部
  • 原文地址:https://www.cnblogs.com/debugxw/p/11297191.html
Copyright © 2011-2022 走看看