题目
题目描述
每个测试点有 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 gcd(a,b)=1 gcd(a,b)=1因为任意两个相邻的整数的最大公约数为 1 1 1,我们可以注意到任意 n n n,都存在 g c d ( n , n − 1 ) = 1 gcd(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)