(数论)又是毕业季II
https://www.luogu.org/problemnew/show/P1414
#include <bits/stdc++.h>
#define ll long long
using namespace std;
inline int re() {
char q = getchar();
int x = 0;
while (q < '0' || q > '9') q = getchar();
while ('0' <= q && q <= '9')
x = (x << 3) + (x << 1) + q - (3 << 4), q = getchar();
return x;
}
const int maxn = 1e4 + 10;
int ans[maxn];
map<int, int> cnt;
int main()
{
int n = re();
register int i, j;
for (i = 0; i < n; i++) {
ans[i + 1] = 1;
int num = re();
ans[1] = max(ans[1], num);
int tmp = sqrt(num);
for(j = 1; j <= tmp; j++) {
if(num % j == 0) {
cnt[j]++;
if (j * j != num) cnt[num / j]++;
}
}
}
map<int, int>::iterator itor = cnt.begin();
for (itor; itor != cnt.end(); itor++)
for (i = 2; i <= itor->second; i++)
ans[i] = max(ans[i], itor->first);
for (i = 1; i <= n; i++) printf("%d\n", ans[i]);
// system("pause");
}
注意枚举因子写法
int tmp = sqrt(num);
for(j = 1; j <= tmp; j++) {
if(num % j == 0) {
cnt[j]++;
if (j * j != num) cnt[num / j]++;
}
}