hoj1016 Joseph's problem I

/*This Code is Submitted by billforum for Problem 1016 at 2012-02-17 17:33:40*/
#include <cstdio>
#include <iostream>
#include <stdlib.h>
#include <memory.h>
#include <math.h>
#include <string.h>
using namespace std;

const int N=3510;
const int M=50000;
int pr[N+1],pn=0;
bool f[M];
void init()
{
    memset(f,1,sizeof(f));
    f[1]=0;
    f[0]=0;
    for(int i=2;i<=M;i++)
    {
        if(f[i]) pr[pn++]=i;
        if(pn==N) break;
        for(int t=0;t<pn&&(i*pr[t]<=M);t++)
        {
            f[i*pr[t]]=0;
            if(i%pr[t]==0) break;
        }
    }
    return;

}
int main()
{
    int n,m;
    init();

  while(cin>>n)
    {
        if(n==0) break;


        int ans=0;
        for(int i=2;i<=n;i++)
        {
        m=pr[n-i];
        ans=(ans+m)%i;
        }
      cout<<ans+1<<endl;
    }

    return 0;
}

 

posted @ 2012-02-17 17:35  wuzhibin  阅读(228)  评论(0编辑  收藏  举报