题意
d(n) = ∑k (n % k == 0),求最小的n满足d(n) = c 如果没有满足的输出-1
c <= 1e7
思路
求1 - n每个数的约数和,时间复杂度为nlogn
然后在逆序推一遍 cf的评测器真好1e7 nlogn 可以过
#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<queue>
#include<set>
#include<map>
#include<vector>
#include<unordered_set>
#include<unordered_map>
using namespace std;
#define x first
#define y second
//#define int long long
typedef pair<int ,int > PII;
typedef long long ll;
const int N = 1e7 + 10;
int c[N];
int ans[N];
int main(){
memset(ans,-1,sizeof ans);
for(int i = 1;i < N;i++){
for(int j = i;j < N;j += i){
if(c[j] < N) c[j] += i;
}
}
for(int i = N - 1;i >= 1;i--)
if(c[i] < N) ans[c[i]] = i;
int T;
scanf("%d",&T);
while(T--){
int k;
scanf("%d",&k);
printf("%d\n",ans[k]);
}
return 0;
}