问
题
转
化
:
问题转化:
问题转化:
x
888
…
8
⏞
=
8
∗
(
1
0
x
−
1
)
9
\begin{matrix}x\\\overbrace{888\dots8}\end{matrix}=\dfrac{8*(10^x-1)}{9}
x888…8
=98∗(10x−1)
令
gcd
(
8
,
L
)
=
d
,
令\gcd(8,L)=d,
令gcd(8,L)=d,
L
∣
8
(
1
0
x
−
1
)
9
⟺
9
L
d
∣
1
0
x
−
1
⟺
1
0
x
≡
1
(
m
o
d
9
L
d
)
L|\dfrac{8(10^x-1)}{9}\iff \dfrac{9L}{d}|10^x-1\iff10^x\equiv1\pmod {\dfrac{9L}{d}}
L∣98(10x−1)⟺d9L∣10x−1⟺10x≡1(modd9L)
可
以
通
过
反
证
法
证
明
:
可以通过\red{反证法}证明:
可以通过反证法证明:
若
a
⊥
n
,
则
最
小
的
x
使
a
x
≡
1
(
m
o
d
n
)
的
x
满
足
x
∣
φ
(
n
)
若a\perp n,则最小的x使a^x\equiv1\pmod n的x满足x|\varphi(n)
若a⊥n,则最小的x使ax≡1(modn)的x满足x∣φ(n)
所
以
求
出
了
φ
(
n
)
之
后
,
就
可
以
枚
举
它
的
因
数
快
速
幂
判
断
满
不
满
足
所以求出了\varphi(n)之后,就可以枚举它的因数快速幂判断满不满足
所以求出了φ(n)之后,就可以枚举它的因数快速幂判断满不满足
t i p : 此 处 的 快 速 幂 中 的 乘 法 注 意 防 止 溢 出 。 tip:此处的快速幂中的乘法注意防止溢出。 tip:此处的快速幂中的乘法注意防止溢出。
#include<iostream>
#include<cstdio>
using namespace std;
long long l;
long long mul(long long x,long long y)
{
long long ret=0;
while(y)
{
if(y&1)(ret+=x)%=l;
y>>=1;
x=2*x%l;
}
return ret%l;
}
long long qpow(long long x,long long y)
{
long long ret=1;
while(y)
{
if(y&1)ret=mul(ret,x);
y>>=1;
x=mul(x,x);
}
return ret%l;
}
int main()
{
int tot=0;
while(scanf("%lld",&l)&&l)
{
for(int i=1;i<=3;++i)if(!(l&1))l>>=1;
l*=9;
long long tl=l;
long long phi=l;
for(long long i=2;i*i<=tl;++i)
{
if(tl%i==0)
{
while(tl%i==0)tl/=i;
phi/=i;
phi*=i-1;
}
}
if(tl!=1)
{
phi/=tl;
phi*=(tl-1);
}
long long ans=1e16;
for(long long i=1;i*i<=phi;++i)
{
if(phi%i==0)
{
if(qpow(10,i)==1)
{
ans=min(ans,i);
}
if(qpow(10,phi/i)==1)
{
ans=min(ans,phi/i);
}
}
}
printf("Case %d: ",++tot);
if(ans==1e16)printf("0\n");
else printf("%lld\n",ans);
}
return 0;
}