题目描述军军最近在学习初等数论,他的数学老师给他出了一道题,他觉得太简单了,懒得做,于是交给了你
题目是这样的:
有一堆数,问你能否从中选出若干个数使得这些数的最小公倍数为x
输入第一行输入一个整数n (1 <= n <= 50)
第二行输入n 个整数ai (1 <= ai <= 109)
第三行输入一个整数x (2 <= x <= 109)
输出如果可以,输出”Possible”
否则输出”Impossible”
请在输出答案后输出换行符,否则会WA
样例输入【样例输入1】
3
3 4 5
20
【样例输入2】
2
3 4
611
【样例输入3】
2
3 4
12
【样例输入4】
10
1 2 3 4 5 6 7 8 9 10
24
样例输出【样例输出1】
Possible
【样例输出2】
Impossible
【样例输出3】
Possible
【样例输出4】
Possible
源代码:
#include
using namespace std;
int d(int a,int b) {
return b==0?a:d(b,a%b);
}
int m(int a,int b) {
return a/d(a,b)*b;
}
int main() {
int n,x,a[11110],lc=1;
cin>>n;
for(int i=1; i<=n; i++) cin>>a[i];
cin>>x;
for(int i = 1; i <= n; ++i) if(x%a[i]==0) lc=m(lc,a[i]);
if(lc%x==0)cout<<"Possible"<<endl;
else cout<<"Impossible"<<endl;
return 0;
}