HDU 2710 Max Factor(数论,素数筛法)
#include<iostream> #include<stdio.h> #include<string.h> #include<cmath> using namespace std; const int maxn=20017; int s[maxn]; int main() { int n,m; int i,j; memset(s,0,sizeof(s)); /*s[1]=1;//埃筛素数 for(i=2; i<maxn; i++) { if(s[i]==0) { for(j=i; j<maxn; j+=i) { s[j]=i;//i表示最大素因子 } } }*/ /*模版:for(i=2; i<maxn; i++)//快筛素数 { if(s[i]==0) { for(j=2; i*j<maxn; j++)//只要乘以i就一定不是素数 { s[i*j]=1//不是素数标为1 } } }*/ for(i=2; i<maxn; i++)//快筛具体应用 { if(s[i]==0) { for(j=1; i*j<maxn; j++) { s[i*j]=i; //i表示最大素因子 } } } while(~scanf("%d",&n)) { int ans; int maxx=-1; for(i=0; i<n; i++) { scanf("%d",&m); if(s[m] > maxx) { maxx = s[m]; ans = m; } } printf("%d\n",ans); } }