#include<bits/stdc++.h> #define ll long long using namespace std; void re(ll a, ll b){ if(a>b) printf("a is the winner!"); if(a<b) printf("b is the winner!"); if(a==b) printf("There is no winner!"); return; } ll ji(int a){ ll ct1=1; ll ct2=a; for(int ct3=0; ct3<ct2; ct3++) { ct1=ct1*a%999068070;//利用乘法分配律的特性将整数抛去,只留下余数,比如:22=2*7+1,那么下次22*23%7的余数实际上就是1*23%7的值,避免了溢出问题 a--; if(ct1==0)//当余数为0时,后边的阶乘将没有意义,所以直接跳出,减少运行时间 break; } return ct1; } int main(){ ll a,b; cin>>a>>b; ll c,d; c=ji(a); d=ji(b); re(c,d); return 0; }
链接:https://ac.nowcoder.com/acm/contest/24803/A
来源:牛客网
来源:牛客网
题目描述
在一个夜黑风高的晚上,牛哥哥吃完心爱的烤串串之后,独自一人漫步在南亭的路上。由于吃的太饱了,牛哥哥决定想一道新生赛的题考(折)验(磨)一下新生,通过脑部的思想风暴促进肚子的消化。
突然间,有两块石头碰瓷了牛哥哥的脚,他气急败坏地捡起来,想要让它们消失在远方。但牛哥哥灵机一动,想要用这两块石头出道题目,以此来显示自己思维之强大。牛哥哥很喜欢竞赛,因为可以一直与别人竞争,因此他也想让两块石头一决高下!
假设两块石头的重量分别为a、b,如果只是简单地比较两者的重量,未免也太简单了。因此,牛哥哥决定计算a!和b!的大小,但因为一个数的阶乘十分之巨大,牛哥哥决定将他们阶乘的结果模一个数再进行比较。此时牛哥哥心中浮现出一个奇妙的模数------999068070,这可是一个很巧妙的模数哦,他心里想。
至此牛哥哥已经完善了他的比较过程,即已知a,b,比较(a!)%999068070和(b!)%999068070的大小,大者则胜出,如相等则打平
作为新手的你们,需要接受牛哥哥的考验,完成比较。
突然间,有两块石头碰瓷了牛哥哥的脚,他气急败坏地捡起来,想要让它们消失在远方。但牛哥哥灵机一动,想要用这两块石头出道题目,以此来显示自己思维之强大。牛哥哥很喜欢竞赛,因为可以一直与别人竞争,因此他也想让两块石头一决高下!
假设两块石头的重量分别为a、b,如果只是简单地比较两者的重量,未免也太简单了。因此,牛哥哥决定计算a!和b!的大小,但因为一个数的阶乘十分之巨大,牛哥哥决定将他们阶乘的结果模一个数再进行比较。此时牛哥哥心中浮现出一个奇妙的模数------999068070,这可是一个很巧妙的模数哦,他心里想。
至此牛哥哥已经完善了他的比较过程,即已知a,b,比较(a!)%999068070和(b!)%999068070的大小,大者则胜出,如相等则打平
作为新手的你们,需要接受牛哥哥的考验,完成比较。
输入描述:
第一行输入两个两个正整数a,b(1≤a,b≤109)a,b(1\le a,b \le10^9)a,b(1≤a,b≤109).
输出描述:
如果重量为a的石头胜出,则输出"a is the winner!" 如果重量为b的石头胜出,则输出"b is the winner!" 如果两者打平,则输出"There is no winner!" 注意:不需要输出""
long long最大阶乘20!
int最大阶乘12!