题目描述
白浅妹妹今天学习了求余运算,她很好奇求余运算和乘法运算结合起来会是什么样子,于是她设计了这样一道题目。
给定数字 n,你可以任选一个数字 k(1 ≤ k ≤ n),然后计算出 n%k 的值(其中% 为求余运算),记为 q,请问 k * q 的最大值是多少?
输入
输入仅包含一个正整数n
输出
输出一行一个整数表示答案。
样例输入 Copy
4
样例输出 Copy
3
提示
【样例解释】
选择 k= 3,那么用 4 求余 3 得到余数 1,最终算出答案为 1 ∗ 3 = 3
【数据限制】
这玩意,要是暴力循环,绝对TLE;给大家试了,大概是7000MS+(
所以需要用数学方法(人工遍历,找规律)
1.当n是4时,易得k=3时最大
2.当n是5时,易得k=3时最大
3.当n是6时,易得k=4时最大
4.当n是7时,易得k=4时最大
5.当n是8时,易得k=5时最大
6.当n是9时,易得k=5时最大
怎么样,发现规律了没?
不管奇数还是偶数,k=n/2+1时ans就可以取到最大值
附上代码:
#pragma GCC optimize(2) #pragma GCC optimize(3) #include <iostream> #include <bits/stdc++.h> using namespace std; int main() {ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);long long n;cin>>n;long long ans=n%(n/2+1)*(n/2+1); cout<<ans;return 0; }