题目
题目描述
每个测试点有
T
T
T 组测试。
每一组测试会给定一个整数
n
n
n ,求小于
n
n
n 的与
n
n
n 互质的最大整数。
提示:对于两个正整数
a
a
a ,
b
b
b 互质,当且仅当
a
a
a ,
b
b
b 的最大公因数是
1
1
1 。
输入输出格式
【输入格式】
第一行给定一个整数
T
T
T ,代表测试样例个数。
第二行输入一个正整数
n
n
n 。
【输出格式】
输出
T
T
T 行,每行一个整数代表该组测试样例的答案。
数据范围
1
⩽
T
⩽
1
0
5
1\leqslant T\leqslant 10^5
1⩽T⩽105
2
⩽
n
⩽
1
0
18
2\leqslant n\leqslant 10^{18}
2⩽n⩽1018
提示:
1
0
18
10^{18}
1018 意味着在c/c++中需要使用long long代替int来避免数据溢出。
测试样例
input1:
1
5
output1:
4
思路
对于两个正整数
a
a
a,
b
b
b互质,当且仅当
g
c
d
(
a
,
b
)
=
1
(a,b)=1
gcd(a,b)=1因为任意两个相邻的整数的最大公约数为
1
1
1,我们可以注意到任意
n
n
n,都存在
g
c
d
(
n
,
n
−
1
)
=
1
(n,n-1)= 1
gcd(n,n−1)=1.故答案为
n
−
1
n - 1
n−1.(思路来源《2024年广东工业大学揭阳校区ACM新生程序设计竞赛题解》)
代码
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull; // 卡精度
const int N = 1e5+7;
void solve()
{
ull n;
cin>>n;
cout<<n-1<<"\n";
}
int main()
{
int t=1;
cin>>t;
while(t--)
{
solve();
}
return 0;
}
复杂度分析
时间复杂度
O
(
T
)
O(T)
O(T)
空间复杂度
O
(
1
)
O(1)
O(1)