HDU-2710-Max Factor(筛法求素数)
这道题是数学题哦~关于质数的,最近一直在写数论哈
题目大意:给你n个数,让你求这n个数质因子最大的那个数,输出那个数。文件形式输入(我在这上面wa了一次)
先开始我是用vector+埃筛,把所有的质因子都存起来了。
后来一直RE,后来把vector换了,换成数组,然后存储了最大的质因子。
(我估摸着这道题卡了vector)
预处理出2e4范围内每个数的最大的质因子,存储在p[]数组中。init()函数是预处理部分。筛出所有的最大质因子。
然后读入数据维护一个最大的质因子和对应的数字就行。
最后输出。
我真的一直在RE,当时搞不懂为啥=-=
代码部分:
#include <bits/stdc++.h>
using namespace std;
const int N = 2e4 + 20;
int n;
int vis[N];
int p[N];
void init()
{
p[1] = 1;
for (int i = 2; i <= 2e4; i++)
{
if (!p[i])
{
for (int j = i; j <= 2e4; j = j + i)
{
p[j] = i;
}
}
}
}
int main()
{
init();
while (~scanf ("%d", &n))
{
int ans = 0, res = 0;
for (int i = 1; i <= n; i++)
{
int t;
scanf ("%d", &t);
if (p[t] > ans)
{
ans = p[t];
res = t;
}
}
cout << res << endl;
}
return 0;
}