zoukankan      html  css  js  c++  java
  • [BalticOI 2000]Division expression 题解(math)

    题目链接

    题目思路

    仔细思考后就就会发现就是判断

    ((a[1] imes a[3] imes a[4]....a[n])\%a[2])是否等于0

    我写的是先把(a[2])质因子分解,最多(30)个左右,然后让其他数对这些质因子进行分解,有点麻烦

    其实可以直接对于每个(i(i!=2); a[2]=a[2]/gcd(a[2],a[i]))

    最后判断(a[2])是否为(1)即可

    方法1代码

    #include<bits/stdc++.h>
    #define fi first
    #define se second
    #define debug cout<<"I AM HERE"<<endl;
    using namespace std;
    typedef long long ll;
    const int maxn=1e4+5,inf=0x3f3f3f3f,mod=1e9+7;
    const double eps=1e-6;
    typedef pair<int,int> pii;
    const ll INF=0x3f3f3f3f3f3f3f3f;
    int n;
    int a[maxn];
    pair<int,int> pa[maxn];
    signed main(){
        int _;scanf("%d",&_);
        while(_--){
            int tot=0;
            scanf("%d",&n);
            for(int i=1;i<=n;i++){
                scanf("%d",&a[i]);
            }
            if(n==1){
                printf("YES
    ");
                continue;
            }
            for(ll i=2;i*i<=a[2];i++){
                if(a[2]%i==0){
                    int cnt=0;
                    while(a[2]%i==0){
                        a[2]=a[2]/i;
                        cnt++;
                    }
                    pa[++tot]={i,cnt};
                }
            }
            if(a[2]!=1){
                pa[++tot]={a[2],1};
            }
            for(int i=1;i<=n;i++){
                if(i==2) continue;
                for(int j=1;j<=tot;j++){
                    if(a[i]==0) continue;
                    while(a[i]%pa[j].fi==0){
                        a[i]=a[i]/pa[j].fi;
                        pa[j].se--;
                    }
                }
            }
            bool flag=1;
            for(int i=1;i<=tot;i++){
                if(pa[i].se>0) flag=0;
            }
            if(flag){
                printf("YES
    ");
            }else{
                printf("NO
    ");
            }
        }
    
        return 0;
    }
    

    方法2代码

    #include<bits/stdc++.h>
    #define fi first
    #define se second
    #define debug cout<<"I AM HERE"<<endl;
    using namespace std;
    typedef long long ll;
    const int maxn=1e4+5,inf=0x3f3f3f3f,mod=1e9+7;
    const double eps=1e-6;
    typedef pair<int,int> pii;
    const ll INF=0x3f3f3f3f3f3f3f3f;
    int n;
    int a[maxn];
    signed main(){
        int _;scanf("%d",&_);
        while(_--){
            scanf("%d",&n);
            for(int i=1;i<=n;i++){
                scanf("%d",&a[i]);
            }
            for(int i=1;i<=n;i++){
                if(i==2) continue;
                a[2]=a[2]/__gcd(a[2],a[i]);
            }
            if(n==1||a[2]==1){
                printf("YES
    ");
            }else{
                printf("NO
    ");
            }
        }
        return 0;
    }
    
    
    卷也卷不过,躺又躺不平
  • 相关阅读:
    echarts 使用demo
    frame外弹出,刷新父页面
    table第一行合并,其余行宽度失效问题
    Redis Desktop Manager
    java web中resources路径
    httpclient
    微信公众号开发: 微信接入(一)
    boot 定时器
    maven自定义archetype
    iOS单例宏
  • 原文地址:https://www.cnblogs.com/hunxuewangzi/p/14801366.html
Copyright © 2011-2022 走看看