链接:https://ac.nowcoder.com/acm/contest/5986/A
来源:牛客网
题目描述
给定 n,求一对整数 (i,j),在满足 1 ≤ i ≤ j ≤ n 且 gcd(i,j)=1 的前提下,要求最大化 i+j 的值
输入描述:
第一行一个整数 n
输出描述:
一行一个整数表示答案
示例1
输入
复制
2
输出
复制
3
备注:
数据范围 1 ≤ n ≤ 1018
解题思路:
gcd(i,j)=1 那么 i、j一定互质。
关于互质:
(1)两个不同的质数一定是互质数。
例如,2与7、13与19。
(2)一个质数,另一个不为它的倍数,这两个数为互质数。
例如,3与10、5与 26。
(3)1不是质数也不是合数,它和任何一个自然数(1本身除外)在一起都是互质数。如1和9908。
(4)相邻的两个自然数是互质数。如 15与 16。
(5)相邻的两个奇数是互质数。如 49与 51。
(6)较大数是质数的两个数是互质数。如97与88。
(7)两个数都是合数(二数差又较大),较小数所有的质因数,都不是较大数的约数,这两个数是互质数。
如357与715,357=3×7×17,而3、7和17都不是715的约数,这两个数为互质数。
(8)两个数都是合数(二数差较小),这两个数的差的所有质因数都不是较小数的约数,这两个数是互质数。如85和78。85-78=7,7不是78的约数,这两个数是互质数。
(9)两个数都是合数,较大数除以较小数的余数(不为“0”且大于“ 1”)的所有质因数,都不是较小数的约数,这两个数是互质数。如 462与 221
462÷221=2……20,
20=2×2×5。
2、5都不是221的约数,这两个数是互质数。
(10)减除法。如255与182。
255-182=73,观察知 73182。
182-(73×2)=36,显然 3673。
73-(36×2)=1,
(255,182)=1。
所以这两个数是互质数。
三个或三个以上自然数互质有两种不同的情况:一种是这些成互质数的自然数是两两互质的。如2、3、5。另一种不是两两互质的。如6、8、9。
所以最大的一定是 n 与 n-1 ,但是要考虑 n=1的时候,
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<map>
#include<stack>
using namespace std;
typedef long long ll;
const int maxn=2e5+10;
string a;
int main()
{
ll n;
cin>>n;
if(n==1)
cout<<2<<endl;
else
cout<<n+n-1<<endl;
return 0;
}