来源:牛客网
牛牛最近在学习初等数论,他的数学老师给他出了一道题,他觉得太简单了, 懒得做,于是交给了你, 题目是这样的: 有一堆数,问你能否从中选出若干个数使得这些数的最小公倍数为x
输入描述:
第一行输入一个整数n(1 ≤ n ≤ 50)
第二行输入n个整数ai (1 ≤ ai ≤ 1e9)
第三行输入一个整数x (2 ≤ x ≤ 1e9)
输出描述:
如果可以,输出"Possible"
否则输出"Impossible"
这个题只需要找出ai中是x的因数的数,再求出这几个数的最小公倍数,如果这个最小公倍数可以被x整除,则证明这里面存在那么几个数使得这几个数的最小公倍数为x;
#include<iostream> using namespace std; const int N=55; int a[N]; int n,x; int gcd(int a, int b) { return b ? gcd(b,a%b) : a; } int lcm(int a, int b) { return a/gcd(a,b)*b; } int main() { int res=1; cin>>n; for(int i=0; i<n; i++) cin>>a[i]; cin>>x; for(int i=0; i<n; i++) { if(x%a[i]==0) { res=lcm(res,a[i]); } } if(res%x==0) cout<<"Possible"; else cout<<"Impossible"; return 0; }View Code