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 "); 22 else printf("YES "); 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 ",step,mod); 15 else printf("%10d%10d Bad Choice ",step,mod); 16 } 17 return 0; 18 }