zoukankan      html  css  js  c++  java
  • 欧几里得&&唯一分解入门题

    题目描述:

    给出nn个正整数X1,X2,X3...XnX_1,X_2,X_3...X_n,判断表达式X1/X2/X3/.../XnX_1/X_2/X_3/.../X_n是否可以通过添加括号使得结果为整数。

    分析:

    设表达式结果为E(x)E(x),那么一定存在E(x)=A/BE(x)=A/B,观察式子发现,X2X_2必然位于分母,此处可使用贪心的思想:使得表达式是整数则分母越少越好。
    于是只需判断E(x)=X1X3...Xn/X2E(x)=X_1*X_3*...*X_n/X_2是否为整数,循环每个数与X2X_2约分即可

    std:

    #include<cstdio>
    using namespace std;
    int GCD(int x,int y)
    {
    	if(y==0)return x;
    	return GCD(y,x%y);
    }
    int a[1005];
    int main()
    {
    	int n;
    	scanf("%d",&n);
    	scanf("%d",&a[1]);
    	int ans=a[1];
    	for(int i=2;i<=n;i++)
    	{
    		scanf("%d",&a[i]);
    		ans=ans/a[i];
    	}
    	printf("%d
    ",ans);
    	int tmp=GCD(a[1],a[2]);
    	a[2]=a[2]/tmp;
    	for(int i=3;i<=n;i++)
    	{
    		if(a[2]==1)
    		{
    			printf("YES
    ");
    			return 0;
    		}
    		int g=GCD(a[i],a[2]);
    		a[2]=a[2]/g;
    	}
    	printf("NO
    ");
    }
    
  • 相关阅读:
    joomla
    笨兔兔的故事(下)
    wine乱码
    笨兔兔的故事(中)
    gedit中文乱码
    php不常用函数
    android配置开发环境ubuntu
    笨兔兔的故事(上)
    关于linux编码
    linux常用命令小记
  • 原文地址:https://www.cnblogs.com/ShineEternal/p/10834241.html
Copyright © 2011-2022 走看看