列表

详情


NC21674. 牛牛与LCM

描述

牛牛最近在学习初等数论,他的数学老师给他出了一道题,他觉得太简单了, 懒得做,于是交给了你,
题目是这样的:
有一堆数,问你能否从中选出若干个数使得这些数的最小公倍数为x

输入描述

第一行输入一个整数n (1 ≤ n ≤ 50)
第二行输入n个整数ai (1 ≤ ai ≤ 109)
第三行输入一个整数x (2 ≤ x ≤ 109)

输出描述

如果可以,输出"Possible"
否则输出"Impossible"

示例1

输入:

4
2 3 4 5
20

输出:

Possible

示例2

输入:

3
2 3 4
611

输出:

Impossible

示例3

输入:

3
2 3 4
12

输出:

Possible

示例4

输入:

10
1 2 3 4 5 6 7 8 9 10
24

输出:

Possible

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++(g++ 7.5.0) 解法, 执行用时: 4ms, 内存消耗: 528K, 提交时间: 2023-06-10 14:19:34

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a[60];
int main()
{
    int n;
    cin>>n;
    ll res=1;
    for(int i=1;i<=n;++i)cin>>a[i];
    int x;
    cin>>x;
    for(int i=1;i<=n;++i)
    {
        if(x%a[i]==0)res=res*a[i]/__gcd(res,a[i]);
    }
    if(res==x)cout<<"Possible"<<'\n';
    else cout<<"Impossible"<<'\n';
}

C++14(g++5.4) 解法, 执行用时: 4ms, 内存消耗: 504K, 提交时间: 2019-07-24 02:08:31

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a[100];
ll n;
int main()
{
   cin>>n;
   ll i;
   for(i=1;i<=n;i++)cin>>a[i];
   ll x;
   cin>>x;
   ll lc=1;
   for(i=1;i<=n;i++)
   {
       if(x%a[i]==0)lc=lc/__gcd(lc,a[i])*a[i];
   }
   if(lc%x==0)printf("Possible\n");
   else printf("Impossible\n");
}

C++(clang++ 11.0.1) 解法, 执行用时: 3ms, 内存消耗: 480K, 提交时间: 2022-08-13 08:39:57

#include<bits/stdc++.h>
using namespace std;
int main (){
	int n;
	cin>>n;
	int a[n+1];
	for(int i=1;i<=n;i++)cin>>a[i];
	int x;
	cin>>x;
	int p=1;
	for(int i=1;i<=n;i++){
		if(x%a[i]==0)p=p/__gcd(p,a[i])*a[i];
	}
	if(p%x==0)cout<<"Possible";
	else cout<<"Impossible";
	return 0;
}

Python3(3.5.2) 解法, 执行用时: 35ms, 内存消耗: 3580K, 提交时间: 2019-07-21 22:05:20

def lcm(x,y):
    def gcd(a,b):
        return a if b==0 else gcd(b,a%b)
    return x*y/gcd(x,y)

n=int(input())
a= [int (e) for e in input().split()]
x=int(input())
ans=1
for  i in a :
 if(x%i==0):
        ans=lcm(ans,i)
print('Possible' if ans==x else 'Impossible')

上一题