题目
思路
(large 2 = 2)
(large 3 = 3)
(large 4 = 2 imes2)
(large 5 = 5)
(large 6 = 2 imes 3)
对于任意一个 (a,b),都可以转换成质数(2,3,5)的几次方的乘积。
(large a = 2^{a_1}3^{a_2}5^{a_3})
(large b = 2^{b_1}3^{b_2}5^{b_3})
只要(b_1 leq a_1),(b_2 leq a_2)并且(b_3 leq a_3),那么 (a) 就是 (b) 的倍数。
Code
#include<cstdio>
#include<cstring>
#include<string>
#include<iostream>
#include<algorithm>
inline void read(int &T) {
int x=0;bool f=0;char c=getchar();
while(c<'0'||c>'9'){if(c=='-')f=!f;c=getchar();}
while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
T=f?-x:x;
}
int n,m,a[6],b[6];
int main() {
read(n),read(m);
for(int i=1,x;i<=n;++i) {
read(x);
if(x==1) continue;
if(x==2) {++a[2];continue;}
if(x==3) {++a[3];continue;}
if(x==4) {a[2]+=2;continue;}
if(x==5) {++a[5];continue;}
if(x==6) {++a[2],++a[3];continue;}
}
for(int i=1,x;i<=m;++i) {
read(x);
if(x==1) continue;
if(x==2) {++b[2];continue;}
if(x==3) {++b[3];continue;}
if(x==4) {b[2]+=2;continue;}
if(x==5) {++b[5];continue;}
if(x==6) {++b[2],++b[3];continue;}
}
for(int i=2;i<=5;++i) {
if(b[i]==0) continue;
if(a[i]<b[i]) {
puts("No");
return 0;
}
}
puts("Yes");
return 0;
}