小猴非常喜欢研究数学问题,这天他学习了质因数的定义,觉得很有意思,他想每个大于 1 1 的数 x 都会有若干的质因数,如果把 x 的质因数乘起来会有什么规律和特殊的性质么?他把这个乘积定义为"因质数",决定深入研究一下,那第一步就是先把每个数的"因质数"求出来。 现在给出 N 个正整数,求出每个数的因质数是多少。
第一行一个正整数 N,表示数的个数;
第二行 N 个正整数
X
1
,X
2
,…X
N
。
1≤X≤1e6, 1≤N≤1e6。
#include <iostream>
using namespace std;
unsigned int n, x, a[1500001], cur, num = 1;
bool y[1500001];
int main()
{
for (register int i = 2; i <= 1500000; ++i)
{
if (!y[i]) a[++cur] = i;
for (register int j = 1; j <= cur && a[j] * i <= 1500000; ++j)
{
y[i * a[j]] = 1;
while (i % a[j] == 0) break;
}
}
scanf("%d", &n);
while (n--)
{
num = 1;
scanf("%d", &x);
for (register int i = 1; a[i] <= x; ++i) if (x % a[i] == 0) num *= a[i];
printf("%d ", num);
}
return 0;
}