/
//一个递归,理解了就忘,今天问了问学长,算是有些许明白,抓紧总结总结,以此代码为例吧。
//假如输入的是9,则调用函数如下。
//1>. s(9,8)
//2>. s(9,4)
//3>. s(9,2)
//4>. s(9,1)
//此时,执行return语句,(注意每次执行以下语句的时候都要运行一次 if(m%2==1) ans=ans*2%n; )
//1). return 2;返回到3>. 过程
//2). 执行ans=ans*ans%n;最后到return ans;执行此语句返回数值4到2>.
//3). 和2相同,数值7返回到1>.
//4). 最后一次递归语句,返回4到主函数。
#include <cstdio>
#include <algorithm>
using namespace std;
long long s(long long n,long long m)
{
if(!m)
return 1;
if(m==1)
return 2;
long long ans;
ans=s(n,m/2)%n;
ans=ans*ans%n;
if(m%2==1)
ans=ans*2%n;
return ans;
}
int main()
{
long long n,ans;
while(scanf("%I64d",&n)&&n)
{
ans=(s(n,n-1)+1)%n;
printf("%I64d\n",ans);
}
}
//假如输入的是9,则调用函数如下。
//1>. s(9,8)
//2>. s(9,4)
//3>. s(9,2)
//4>. s(9,1)
//此时,执行return语句,(注意每次执行以下语句的时候都要运行一次 if(m%2==1) ans=ans*2%n; )
//1). return 2;返回到3>. 过程
//2). 执行ans=ans*ans%n;最后到return ans;执行此语句返回数值4到2>.
//3). 和2相同,数值7返回到1>.
//4). 最后一次递归语句,返回4到主函数。
#include <cstdio>
#include <algorithm>
using namespace std;
long long s(long long n,long long m)
{
if(!m)
return 1;
if(m==1)
return 2;
long long ans;
ans=s(n,m/2)%n;
ans=ans*ans%n;
if(m%2==1)
ans=ans*2%n;
return ans;
}
int main()
{
long long n,ans;
while(scanf("%I64d",&n)&&n)
{
ans=(s(n,n-1)+1)%n;
printf("%I64d\n",ans);
}
}