标签:turn 出现 color 因子 img space int name printf
题目描述:
题目大意:找出具有最大素数因子的整数。如果有不止一个,则输出在输入文件中出现最早的一个。
解题思路:刚开始时,p数组中的元素全为0,刚开始对于素数 i,p[i]=0,用一个for循环,将是素数 i 的倍数的数 的在数组p中的值全部赋值为 i;
如:第一轮:2为素数,p[2]=0,p[4]=2,p[6]=2,p[8]=2......p[2*n]=2;
第二轮:3为素数, p[3]=0,p[6]=3,p[9]=3,p[12]=3......p[3*n]=3;
第...轮:i为素数,p[i]=0,p[i+n*i]=i;
再如下列测试案例中 m=38时,在第一轮中,2为素数,38是2的倍数,所以p[38]=2;在第18轮(即i=19)时,19为素数,而38是19的倍数,所以p[38]更新为19
代码实现:
#include<stdio.h> #include<iostream> const int MAX=20005; int p[MAX]; using namespace std; int main() { int n,s,m,maxn; int i,j; p[1]=1; for(i=2;i<MAX;i++) { if(p[i]==0) for(j=i;j<MAX;j+=i)//这一段代码不断实现对p数组进行更新 p[j]=i; } while(~scanf("%d",&n)) { maxn=-1; while(n--) { scanf("%d",&m); if(p[m]>maxn) { maxn=p[m]; s=m; } } printf("%d\n",s); } return 0; }
标签:turn 出现 color 因子 img space int name printf
原文地址:https://www.cnblogs.com/LJHAHA/p/9991791.html