[BZOJ 1385]Division expression

danihao123 posted @ 2016年2月15日 15:57 in 题解 with tags BZOJ BOI 数学 数论 约分 , 664 阅读
转载请注明出处:http://danihao123.is-programmer.com/

咦……这道题怎么这么眼熟呢?

数论经典题……

然后发现我连gcd都不会写了……

代码:

/**************************************************************
    Problem: 1385
    User: danihao123
    Language: C++
    Result: Accepted
    Time:156 ms
    Memory:884 kb
****************************************************************/
 
#include <cstdio>
#include <cctype>
typedef unsigned long long ull;
const int maxn=10001;
ull gcd(ull a,ull b){
    if(b==0)
        return a;
    else
        return gcd(b,a%b);
}
ull A[maxn];
ull fm;
bool solve(int k){
    ull temp;
    register int i;
    for(i=0;i<=(k-2);i++){
        temp=gcd(A[i],fm);
        if(temp==1)
            continue;
        fm/=temp;
        A[i]/=temp;
    }
    return fm==1;
}
template<typename T>
inline T readint(){
    char c=getchar();
    T ans=0;
    while(!isdigit(c))
        c=getchar();
    while(isdigit(c)){
        ans=ans*10+c-'0';
        c=getchar();
    }
    return ans;
}
int main(){
    register int d,k,i;
    d=readint<int>();
    while(d--){
        k=readint<int>();
        A[0]=readint<ull>();
        if(k==0){
            puts("YES");
            continue;
        }
        fm=readint<ull>();
        for(i=1;i<=(k-2);i++)
            A[i]=readint<ull>();
        if(solve(k))
            puts("YES");
        else
            puts("NO");
    }
    return 0;
}

登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter