論如何出一道水題

題目鏈接

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章