题目:
思路:
将数组从大到小排序。从最大的数开始减1,直到B能整除它,然后B=B除以这个数。以此类推。奇怪的是,我只考虑了减1的情况,也就是默认所有数相乘后是大于等于B的。我也不知道为什么,所有case就全部通过了。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int cmp(const long long &a, const long long &b){
return a > b;
}
int main(){
int n, B;
cin >> n >> B;
vector<long long> vec;
for (int i = 0; i < n; ++i){
int t;
cin >> t;
vec.push_back(t);
}
sort(vec.begin(), vec.end(), &cmp);
int count = 0;
for (int i = 0; i < vec.size(); ++i){
if (B % vec[i] == 0){
B /= vec[i];
}else{
--vec[i];
--i;
++count;
}
}
cout << count <<endl;
}