码迷,mamicode.com
首页 > 其他好文 > 详细

素数筛选-hdu2710

时间:2018-11-20 22:56:10      阅读:214      评论:0      收藏:0      [点我收藏+]

标签: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;
}

 

素数筛选-hdu2710

标签:turn   出现   color   因子   img   space   int   name   printf   

原文地址:https://www.cnblogs.com/LJHAHA/p/9991791.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!