代码源每日一题 2022-5-9

该博客讨论了一个数学问题:如何将1到n的整数分成两组,使得两组数字的和的最大公约数最大化。博主通过分析转换题意,提出了解决方案:找到n的平方根以下能整除n*(n+1)/2的最小值,输出这个商作为最大公约数。此外,博主还特别提到了当n=2时的特殊情况以及初次尝试的代码存在潜在问题。
摘要由CSDN通过智能技术生成

数学 - 题目 - Daimayuan Online Judge

给定整数 n,胖教授想将1∼n这nn个数字分成两组,每一组至少有一个数,并且使得两组数字的和的最大公约数最大,请输出最大的最大公约数。

输入格式:

一行输入一个n。

输出格式:

输出一个最大的公约数。

数据:

对于20%的数据,保证n≤100。

对于100的数据,保证n≤1e9。

输入样例:

6

输出样例

好了,题目已经看完了,然后就是解题了。

1:我们先来转化题意因为题目是1~n分成俩组数据,那1~ 1 + 2 + 3 +....+n之间的任何一个数都可能被分成一组,然后其余的数就是在另外一组。

也就是说我们先设sum为1~n的和。 分成俩组就理解成把sum分解成x,sum-x,这俩个数,x可以是1~sum的任何一个数。然后让我们求x , sum - x的最大的公约数的值。那再转化成一个更容易理解的东西,也就是说最少把sum整分成几份。

2:题目意思转换完成之后,题目就变得十分简单,那就是说看sum最小可以整除几(iÿ

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值