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; }