论如何出一道水题

题目链接

链接: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;
}

猜你喜欢

转载自blog.csdn.net/weixin_43819762/article/details/106676820