codeforces The Eternal Immortality 题解

来源:互联网 发布:qq三国陆逊打技能数据 编辑:程序博客网 时间:2024/06/04 08:12

传送门:codeforces


题目大意:给你两个数a,b,其中0 ≤ a ≤ b ≤ 1018,问b!/a!的最后一位的值,其中!为阶乘符号。


Examples
Input
2 4
Output
2
Input
0 10
Output
0
Input
107 109
Output
2

思路:由于a和b都很大,我们肯定是不可能直接计算结果的。我们注意到b一定不小于a,b!/a!一定是整数,为什么呢?因为两者有重合的部分:1*2*3*…*a,所以这个题可以化简一下:b!/a!=(a+1)*(a+2)*…*b,我们只需要计算这个乘法的值就好了。我们又发现当乘数个数大于10(其实大于5就够了)的时候,最低位一定是0,很好理解,任何数乘以0都为0.


具体实现如果b-a的值大于等于10则结果为0,否则暴力求解。


注意:当a为0的时候需要让a+1,否则会出错。


#include<bits/stdc++.h> using namespace std;typedef long long LL;int main() {LL i,a,b,ans;while(~scanf("%lld%lld",&a,&b)){if(a==0) a=1;ans=1;if(b-a>=10) printf("0\n");else {for(i=a+1;i<=b;i++){ans*=i;ans%=10;}printf("%lld\n",ans);}}return 0;}


原创粉丝点击