#include <cstdio>
#include <cstring>
#include <cmath>
#include <iostream>
#include <algorithm>
using namespace std;
#define LL __int64
LL t,e[1000];
LL mod;
LL euler_phi(LL n)//歐拉函數
{
LL m=sqrt(n+0.5);
LL ans=n,i;
for(i=2;i<=m;i++)
{
if(n%i==0)
{
ans=ans/i*(i-1);
while(n%i==0)n=n/i;
}
}
if(n>1)ans=ans/n*(n-1);
return ans;
}
void find(LL n)
{
LL i;
e[t++]=n;
for(i=2;i*i<=n;i++)
{
if(n%i==0)
{
if(i*i==n)
e[t++]=i;
else
{
e[t++]=i;
e[t++]=n/i;
}
}
}
}
LL pows(LL a,LL b)
{
LL s=1;
while(b)
{
if(b&1)
s=(s*a)%mod;
a=(a*a)%mod;
b=b>>1;
}
return s;
}
int main()
{
LL n;
while(cin>>n)
{
if(n%2==0||n==1)
cout<<"2^? mod "<<n<<" = 1"<<endl;
else
{
LL m,ans,i,s=2;
/*for(i=2;;i++)//直接暴力的方法
{
s=(s*2)%n;
if(s==1)
break;
}
ans=i;*/
m=euler_phi(n);
t=0;
find(m);
sort(e,e+t);
mod=n;
for(i=0;i<t;i++)
{
if(pows(2,e[i])==1)
{
ans=e[i];
break;
}
}
cout<<"2^"<<ans<<" mod "<<n<<" = 1"<<endl;
}
}
return 0;
}
/*
這題資料很水,可以直接暴力出來。
我要講的使用定理求解這道題:
本題很容易發現n為偶數或者0時無解。是以2和n必定互質
歐拉定理:a^(euler_phi(n))≡1(mod n),(a,n互質)
其中euler_phi為歐拉函數,計算不超過n且與n互質的個數。求法是n*∏(pi-1)/pi,pi為n的質因子
m=euler_phi(n);
是以a^m%mod=1,不過m不一定是最小循環,但m是一個循環,則最小循環不定時m的一個因子,因而找出所有m的因子,暴力
搜尋下就OK了
*/