hdu1222&hdu1014 循环群的生成元

hdu1222

题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=1222

题目大意:

大灰狼追小白兔。小白兔可以躲起来的洞绕成一个圈,大灰狼从0这个点出发,每次走m个,问这些洞有木有可以不被狼找到的

解题思路:

相当于判断m是不是模n加群的生成元,如果是的话,那么可以到达0到n-1每个洞,不是则不能到达每个洞。

而判断是否为生成元,直接判断gcd(n, m) = 1,等于1就是生成元。

关于循环群生成元的知识点这里 -> 传送门

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 #include<set>
 6 #include<cmath>
 7 using namespace std;
 8 const int maxn = 1e4 + 10;
 9 typedef long long ll;
10 ll T, n, m;
11 ll gcd(ll a, ll b)
12 {
13     return b == 0 ? a : gcd(b, a % b);
14 }
15 int main()
16 {
17     cin >> T;
18     while(T--)
19     {
20         cin >> n >> m;
21         if(gcd(n, m) == 1)printf("NO\n");
22         else printf("YES\n");
23     }
24     return 0;
25 }

hdu1014

题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=1014

题目大意:

公式:seed(x+1) = [seed(x) + STEP] % MOD;如果STEP=3,MOD=5,那么seed的值为以3,1,4,2,0为一组循环,即[0,MOD-1],这种称为“Good Choice”;如果STEP=15,MOD=20,那么seed的值为以15,10,5,0为一组循环,不满足[0,MOD-1],所以这种称为“Bad Choice”。

思路:

和之前一样,这里代码直接给暴力的

 1 #include<stdio.h>
 2 int a[100010];
 3 int main()
 4 {
 5     int step,mod,i;
 6     while(scanf("%d%d",&step,&mod)!=EOF)
 7     {
 8         a[0]=0;
 9         for(i=1;i<=mod;i++)
10         {
11             a[i]=(a[i-1]+step)%mod;
12             if(a[i]==0)break;
13         }
14         if(i==mod)printf("%10d%10d    Good Choice\n\n",step,mod);
15         else printf("%10d%10d    Bad Choice\n\n",step,mod);
16     }
17     return 0;
18 }

 

posted @ 2018-04-01 22:31  _努力努力再努力x  阅读(751)  评论(0编辑  收藏  举报