1 solutions

  • 0
    @ 2024-12-5 18:19:40

    C++ :

    #include<bits/stdc++.h>
    using namespace std;
    bool isLucky[2000010];
    vector<int> luck;
    inline bool iswp(int x){
    	int k = sqrt(x);
    	return k * k == x;
    }
    inline int find(int x){
    	if(luck[0] > x) return luck[0];
    	int l = 0, r = luck.size() - 1;
    	while(l <= r){
    		int mid = (l+r) >> 1;
    		if(luck[mid] > x && luck[mid-1] < x){
    			return luck[mid];
    		}
    		if(luck[mid] < x){
    			l = mid + 1;
    		}
    		if(luck[mid-1] > x){
    			r = mid - 1;
    		}
    	}
    	return -1;
    }
    int main(){
    	int a, N;
    	cin >> a >> N;
    	for(int i = a; i < 2000010; i++){
    		if(iswp(i)){
    			for(int j = i; j < 2000010; j += i){
    				isLucky[j] = true;
    				luck.push_back(j);
    			}
    		}
    	}
    	sort(luck.begin(), luck.end());
    	while(N--){
    		int x;
    		cin >> x;
    		if(isLucky[x]){
    			cout << "lucky" << endl;
    		}else{
    			cout << find(x) << endl;
    		}
    	}
    	return 0;
    }
    
    • 1

    Information

    ID
    9168
    Time
    1000ms
    Memory
    256MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By