easymath


easymath


题目描述军军最近在学习初等数论,他的数学老师给他出了一道题,他觉得太简单了,懒得做,于是交给了你

题目是这样的:

有一堆数,问你能否从中选出若干个数使得这些数的最小公倍数为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;
}

AC


你可能感兴趣的:(easymath)