POJ 1619 EKG Sequence

来源:互联网 发布:技术服务咨询平台软件 编辑:程序博客网 时间:2024/06/07 19:40

公因子一定是 前面那个数中,最大的素因子

#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <algorithm>#define A system("pause")using namespace std;const int maxn=1000000+5;inline void debug(){    printf("where is wrong?\n");}inline int max(int a,int b){    return a>b?a:b;}inline int min(int a,int b){    return a<b?a:b;}int res[maxn]={0};int a[maxn];int b[maxn]={0};inline void make_table(){   int i,j,n,cur,k,an,p;   res[1]=1;   res[2]=2;   for(i=0;i<maxn;i++)    a[i]=i;    a[2]=4;   for(i=2;i<maxn;i++)   {      if(b[i]==0)      {        for(j=1;i*j<maxn;j++)        {            if(b[i*j]==0)                b[i*j]=i;        }      }   }   cur=2;   for(n=2;n<maxn;n++)   {     k=cur;     cur=maxn;     while(k!=1)     {         p=b[k];         while(res[a[p]]!=0&&a[p]+p<maxn)//更新a[]          a[p]+=p;         cur=cur>a[p]?a[p]:cur;         while(k%p==0)    //去除k的最小因子,继续比较         k=k/p;     }     res[cur]=n+1;   }}int main(){   int n;   make_table();   while(scanf("%d",&n)&&n)   {     printf("The number %d appears in location %d.\n",n,res[n]);   }   return 0;}


 


 

原创粉丝点击