Trailing Zeroes (II) LightOJ - 1090(數學推導題,求階乘質因子個數)
阿新 • • 發佈:2020-09-18
題意:求C(n,r)*p^q最後答案中末尾0的個數。
思路:很明顯的思路是分解質因子2和5,可是C(n,r)如何分解呢。可以通過C(n,r)=n!/(n-r)!*r!。只要求出階乘的因子個數就能得出答案。如何求出階乘的因子個數,可以想到對於n!求p的質因子個數,在1~n中至少包含一個p的有n/p個,而至少包含兩個p的有n/p*2......所以最後答案是n/p+n/p^2+n/p^3....為什麼不是n/p+2*n/p^2呢,注意至少兩個字。
#include<stdio.h> #include<math.h> #include<string.h> #include<map> #include<vector> #include<algorithm> #define N 2000006 #define ll long long #define ull unsigned long long using namespace std; int main() { int t; int u=0; scanf("%d",&t); while(t--) { ll a,b,c; scanf("%lld%lld%lld",&a,&b,&c); ll d=__gcd(a,b); ll y=a*b/d; printf("Case %d: ",++u); if(c%y==0) { ll sum=c/y; ll r=__gcd(sum,y); while(r!=1) { sum*=r; y/=r; r=__gcd(sum,y); } printf("%lld",sum); } else printf("impossible"); printf("\n"); } }