首页 > 试题广场 >

数对

[编程题]数对
  • 热度指数:59128 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

牛牛以前在老师那里得到了一个正整数数对(x, y), 牛牛忘记他们具体是多少了。

但是牛牛记得老师告诉过他x和y均不大于n, 并且x除以y的余数大于等于k。

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


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


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

输入

5 2

输出

7

说明

满足条件的数对有(2,3),(2,4),(2,5),(3,4),(3,5),(4,5),(5,3)
头像 知晓天空之蓝
发表于 2022-02-17 17:37:25
用普通的遍历是没办法走到最后的,数据一但非常大时,时间复杂度就会报错,这里就需要推导一下数学公式:(n / y) * (y - k) + ((n % y < k) ? 0, (n % y - k + 1)); 当 y <=k 时,意味着任何数字取模y的结果都在 [0, k-1]之间,都是 展开全文
头像 阿杭。
发表于 2022-01-27 12:18:41
暴力求解的话时间复杂度根本不能达到要求,所以我们直接去 推出这个数学问题的*****公式**** #include<stdio.h> int main() { //考的是数学只是,暴力求解的话时间复杂度根本不能达到要求,所以我们直接去 //推出这个数学问题的******* 展开全文
头像 牛客题解官
发表于 2020-06-04 11:13:57
题目难度:三星考察点:数学、枚举 方法1:暴力算法 分析:从1-n挨个枚举x,y,对于每个数对(x,y)判断是否x%y>=k,如果满足条件结果ans++,最后输出ans即可。 复杂度分析:时间复杂度:O(n^2)空间复杂度:O(1) 代码:#include <bits/stdc++.h 展开全文
头像 来来,offer来来
发表于 2020-04-09 21:53:38
题目描述牛牛以前在老师那里得到了一个正整数数对(x, y), 牛牛忘记他们具体是多少了。 但是牛牛记得老师告诉过他x和y均不大于n, 并且x除以y的余数大于等于k。牛牛希望你能帮他计算一共有多少个可能的数对。 输入描述:输入包括两个正整数n,k(1 <= n <= 10^5, 0 < 展开全文
头像 c小白进击之路
发表于 2021-04-07 19:50:00
看了前面3个人的题解,只看懂了枚举y的范围,最后结果超时, 枚举下的每个(y=k)++的数量,需要用简单的数学逻辑表达,这个表达自己手写数组才理解。 下图前后两种代码,第一种ng,第二种ok; #include<stdio.h> int main() {   & 展开全文
头像 时光拾缀思念
发表于 2024-04-25 23:56:09
#include <stdio.h> int main() { long long int x, y, n, k, count = 0; scanf("%lld %lld", &n, &k); if (k == 0) { printf(& 展开全文
头像 帅气哥哥
发表于 2023-08-05 16:24:56
#include <stdio.h> int main() { long long n = 0; long long k = 0; long long count = 0; while (scanf("%lld %lld", & 展开全文
头像 laglangyue
发表于 2020-05-15 21:06:17
本题考查找规律,类似此类问题建议寻找周期序列来理清自己的逻辑。注意两条性质: 余数呈周期性变化,当除数为y时,余数从0到y-1,周期性变化,周期为y,注意第一个0不存在。周期性变化是1,。。。,y-1,0 除数为y,则余数小于y,而余数>=k,所以除数>k 思路:设除数为y 展开全文