您的位置:首页 > 其它

NYOJ145【聪明的小珂】

2015-04-06 15:36 169 查看

聪明的小珂

时间限制: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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: