long Calculate(char name[]);
int main()
{
char CometName[10], GroupName[10];
freopen("ride.in", "r", stdin);
freopen("ride.out", "w", stdout);
scanf("%s", CometName);
scanf("%s", GroupName);
if((Calculate(CometName) % 47) == (Calculate(GroupName) %47))
printf("GO\n");
else printf("STAY\n");
fclose(stdin);
fclose(stdout);
return 0;
}
long Calculate(char name[])
{
int i;
long res=1;
for(i=0; name[i]!='\0'; ++i)
{
res*=(name[i]-'A'+1);
}
return res;
}
4. 模运算规则, 模运算与基本四则运算有些相似,但是除法例外。其规则如下
(a + b) % n = (a % n + b % n) % n (1)
(a - b) % n = (a % n - b % n) % n (2)
(a * b) % n = (a % n * b % n) % n (3)
ab % n = ((a % n)b) % n (4)
(1)式证明
∵ a = k1*n + r1
b = k2*n + r2
a % n = r1
b % n = r2
∴(a+b) % n = ((k1+k2)*n + (r1+r2)) % n = (r1+r2) % n = (a % n + b % n)% n
得证
(2)式证明同上
(3)式证明
a = k1*n + r1
b = k2*n + r2
(a*b) % n = (k1k2n2 + (k1r2+k2r1)n + r1r2) % n = r1r2 % n = (a %n * b %n ) % n
(4)式证明
设 a % n = r
ab %n= (a * a * a * a…*a) %n = (a %n * a %n * a %n * … * a %n) %n = rb % n = ((a % n) b) % n
模运算看起来不是很直观,但是可以用来推导出一些有用的东西。 例如(4)式可以用来降幂运算,例如计算6265 % 133,直接计算的话需要算出6265 利用(4)式可以进行降幂运算。
6265 % 133
= 62 * 6264 % 133
= 62 * (622)32 % 133
= 62 * 384432 % 133
= 62 * (3844 % 133)32 % 133
= 62 * 12032 % 133
= 62 * 3616 % 133
= 62 * 998 % 133
= 62 * 924 % 133
= 62 * 852 % 133
= 62 * 43 % 133
= 2666 % 133
= 6
所以修改版本为
#include <stdio.h>
long Calculate(char name[]);
int main()
{
char CometName[10], GroupName[10];
freopen("ride.in", "r", stdin);
freopen("ride.out", "w", stdout);
scanf("%s", CometName);
scanf("%s", GroupName);
if(Calculate(CometName) == Calculate(GroupName))
printf("GO\n");
else printf("STAY\n");
fclose(stdin);
fclose(stdout);
return 0;
}
long Calculate(char name[])
{
int i;
long res=1;
for(i=0; name[i]!='\0'; ++i)
{
res*=((name[i]-'A'+1) % 47);
}
return res % 47;
}