#include #include #include struct node{ int no; struct node *next; }; int prime[5000],nprime; int main(){ int i,j; int sq; int check; int n; int cut,count; struct node *member,*ptr,*current; prime[0]=2; nprime=1; for(i=3;nprime<=3502;i+=2){ check=1; sq=sqrt(i); for(j=3;j<=sq;j+=2){ if(i%j==0){ check=0; break; } } if(check==1){ prime[nprime++]=i; } } while(1){ scanf("%d",&n); if(n==0)break; if(n==1){printf("1\n");continue;} member=(struct node*)malloc(sizeof(struct node)); member->no=1; member->next=NULL; current=member; for(i=2;i<=n;i++){ ptr=(struct node*)malloc(sizeof(struct node)); current->next=ptr; ptr->no=i; ptr->next=NULL; current=ptr; } current->next=member; /*current=member;*/ count=0; while(n>1){ cut=prime[count++]; /*if(count==1)cut--;*/ cut = (cut-1) % n + 1; /*printf("(%d)",cut);*/ while(cut--){ ptr=current; current=current->next; } /*printf("[%d]\n",current->no);*/ ptr->next=current->next; /*free(current);*/ current=ptr; n--; } printf("%d\n",ptr->no); } getchar(); return 0; }