Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <queue>
- #include <vector>
- #include <algorithm>
- #include <cmath>
- #include <cstring>
- using namespace std;
- #define Inf 0x3f3f3f3f
- #define mod 1e9+7
- int n;
- queue<int> q;
- vector<int>minim(100005,Inf);
- void lee(){
- while(!q.empty()){
- int x = q.front();
- q.pop();
- for(int d = 1 ; d * d <= x ; d += 1 + x % 2){
- if(x % d == 0){
- if(x + d <= 100001 && minim[x + d] > minim[x] + 1){
- minim[x + d] = minim[x] + 1;
- q.push(x + d);
- }
- if(x + (x / d) <= 100001 && minim[x + (x / d)] > minim[x] + 1){
- minim[x + (x / d)] = minim[x] + 1;
- q.push(x + (x / d));
- }
- }
- }
- }
- }
- int main(){
- cin >> n;
- for(int i = 1,x ; i <= n ; ++i){
- cin >> x;
- q.push(x);
- minim[x] = 0;
- }
- lee();
- int q;
- cin >> q;
- for(int i = 1,x ; i <= q ; ++i){
- cin >> x;
- if(minim[x] == Inf)
- cout << "-1\n";
- else
- cout << minim[x] << '\n';
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement