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;
    }
    
    
    卷也卷不过,躺又躺不平
  • 相关阅读:
    H5相关网址
    ASP.NET MVC Razor视图引擎攻略
    深度解析 ASP.NET MVC 5
    .Net MVC 框架基础知识
    java SDK服务端推送 --极光推送(JPush)
    Nexus Repository Manager OSS 3.x 安装配置
    java项目中使用ffmpeg剪辑部分视频
    net 异步与同步
    IDEA把spring-boot项目打包成jar
    开放api接口签名验证
  • 原文地址:https://www.cnblogs.com/hunxuewangzi/p/14801366.html
Copyright © 2011-2022 走看看