nyoj 最大素因子

来源:互联网 发布:种子填充算法例子 编辑:程序博客网 时间:2024/04/29 15:16

题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=520


思路:

1.赛选法打素数表;

2.求素数因子;

3.二分法找序号;

代码如下:


#include <iostream>#include <stdio.h>#include<math.h>#include<string.h>using namespace std;const int MAX =1000001;bool a[MAX];int b[MAX];int erfen(int left,int right,int m){    while(right-left>1)    {        int mid=(left+right)/2;        if(b[mid]==m)            return mid;        else if(b[mid]>m)            right=mid;        else            left=mid;    }    return -1;}int is_prime(){    memset(a,true,sizeof(a));    int i,j;    for(i=2;i<MAX/2;i++)    {        if(a[i])        {            for(j=i<<1;j<=MAX;j+=i)            {                a[j]=false;            }        }    }    j=1;    b[0]=1;    for(i=2;i<MAX;i++)    {        if(a[i])            {                b[j]=i;                j++;            }    }    return j;}main(){    int i,j,m;    int max;    int v=is_prime();    while(~scanf("%d",&m))    {        if(m==1)        {            printf("0\n");            continue;        }        max=0;        for(i=2;i<=sqrt(m);i++)        {            while(m!=1)            {                if(m%i==0)                {                    m/=i;                }                else                break;            }            max=i;        }        max=m==1?max:m;        printf("%d\n",erfen(0,v,max));    }}


原创粉丝点击