学习求余

题目描述

白浅妹妹今天学习了求余运算,她很好奇求余运算和乘法运算结合起来会是什么样子,于是她设计了这样一道题目。
给定数字 n,你可以任选一个数字 k(1 ≤ k  ≤ n),然后计算出 n%k 的值(其中% 为求余运算),记为 q,请问 k * q 的最大值是多少?

输入

输入仅包含一个正整数n

输出

输出一行一个整数表示答案。

样例输入 Copy
4
样例输出 Copy
3
提示

【样例解释】
选择 k= 3,那么用 4 求余 3 得到余数 1,最终算出答案为 1 ∗ 3 = 3


【数据限制】

学习求余_第1张图片

这玩意,要是暴力循环,绝对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 
#include 
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<

你可能感兴趣的:(算法,c++)