原题点这里
此题是简单的欧几里得算法求最大公因数的运用,但是输入输出必须用scanf
和printf
否则会TLE。
原因:scanf
和printf
在处理较大数据(long long)方面比 ‘cin’和 ‘cout’快很多。
注意用printf
输出长整型时应用 %lld
,而不是%d
.
如
long long a = 1;
printf("%lld\n", a);
代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1010;
ll n;
ll gcd(ll a, ll b)
{
return b ? gcd(b, a % b) : a;
}
void solve()
{
cin >> n;
ll a = ceil(n / 4.0), b = floor(n / 2.0);
ll i;
for (i = a; i <= b; i++) {
if (gcd(i, n) == 1) {
cout << i << endl;
break;
}
}
if (i == b + 1) cout << -1 << endl;
}
int main()
{
cin.tie(0);
cout.tie(0);
ios::sync_with_stdio(false);
int t = 1;
cin >> t;
while (t--)
solve();
return 0;
}