聪明的小珂
时间限制:
1000 ms | 内存限制:
1000 KB
难度:
3
-
描述
-
小珂是一个爱美的女孩,她有n条新项链,标号从1到n,每一条项链在颜色上都会有一些差别,n条项链依次摆放,围成一个圈。小珂每次都会从上一次选择项链的位置开始数到第k条项链,把这条项链作为今天要带的项链,每次数的方向都是一致的,现在希望你帮小珂计算出一个最大的k,满足k<=n/2的同时,使得小珂在接下来的n天中将所有的项链都刚好带了一遍。
例如 n=7,取k=3
天数 项链编号
1 1
2 4
3 7
4 3
5 6
6 2
7 5
-
输入
- 第一行有一个整数 0<m<10000 表示有m组测试数据,接下来的m行每行有一个整数,表示小珂的项链个数2<=m<2^31 输出
- 输出m个k的值 样例输入
-
2
-
2
-
7
样例输出
-
1
-
3
刚开始我以为是找规律。结果规律找到了- -,我发现这个组合的一个数a[i]+K%n=a[i+1]或者==0 。可是,数据范围太大,,M>13就要等很久~~
打表出来前12个数据。
m k
3 1
4 1
5 2
6 1
7 3
8 3
9 4
10 3
11 5
12 5
乍一看没什么特点,仔细观察就会发现,K与M互质- -,有人说 6与5也互质啊- -,要知道K<=m/2。得到这个那就好办了。
#include<iostream>
using namespace std;
int gcd(int a, int b)
{
return b ? gcd(b, a % b) : a;
}
int main()
{
int nCase, n, t;
cin >> nCase;
while (nCase--)
{
cin >> n;
t = n >> 1;
while (gcd(n, t--) != 1);
cout << ++t << endl;
}
}