小国的游戏
Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 91 Solved: 24
[ Submit][ Status][ Discuss]
Description
可怜的小国和小辉在双十一过后,吃饭都吃不起了,只能在吃饭时间玩会游戏来打发时间。可是时间久了之后,他们各种游戏都玩了一遍,所以他们两个打算合作出一个新奇的游戏。最终,他们决定先做四个纸箱,每个纸箱里面放1000张卡片,每张卡片上写一个数字。
小国从不同的两个纸箱里抽两张卡片,卡片上的数字是a和b,小辉从另外两个不同的纸箱里抽两张卡片,卡片上的数字是c和d。然后两个人分别用特定的计算方法计算一个结果。计算方法是小国计算a^b的值,然后将该值的各位数字的和计算出来,小辉计算c^d的值,然后将该值的各位数字的和计算出来,如果他们各自得到的和不是一位数,那么继续分别计算各自的各个位数的和。最后小国将他计算出来的数字扩大2017倍,然后用新得到值的素因子和作为分子,小辉将他计算出来的数字扩大1203倍,然后用新得到的值的素因子和作为分母,得出一个分数,并且将这个分数化简为最简分数。
可是小辉和小国的数学都很差,想请热爱编程的你帮忙计算这个最简分数。
Input
输入T(1<=T<=50),表示有T组输入
接下来T行数据,每行有四个整数a,b,c,d(0<a,b,c,d<=1000)。
Output
每行输出一个答案,答案用最简分数表示。
Sample Input
25 2 2 62 9 3 6
Sample Output
506/101
2019/404
AC代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
int main()
{
int a,b,c,d;
int i,p,j,t,n,m,x;
int first,second,head,tail,mid;
int check[30001]= {0};
for(i=2; i<=30000; i++)
{
if(check[i]==0)
{
for(j=i+i; j<=30000; j+=i)
check[j]=1;
}
}
scanf("%d",&t);
for(i=1; i<=t; i++)
{
scanf("%d %d%d%d",&a,&b,&c,&d);
first=second=1;
head=tail=mid=0;
while(b)
{
if(b&1==1)
first=first*a%9;
a=a*a%9;
b>>=1;
}
if(first==0)
first=9;
while(d)
{
if(d&1)
second=second*c%9;
c=c*c%9;
d>>=1;
}
if(second==0)
second=9;
first=first*2017;
second=second*1203;
for(j=2;j<=first;j++)
if(first%j==0&&check[j]==0)
head+=j;
for(j=2;j<=second;j++)
if(second%j==0&&check[j]==0)
tail+=j;
m=head;
n=tail;
while(m>0)
{
int c=n%m;
n=m;
m=c;
}
head=head/n;
tail=tail/n;
printf("%d/%d\n",head,tail);
}
return 0;
}