题解:我们可以发现一个规律:
km
k
m
mod
m
o
d
p=t
p
=
t
。
当
t=0
t
=
0
时条件一成立。
当
t=1
t
=
1
时条件二成立。
当
t=−1
t
=
−
1
时条件三成立。
证明:一个k进制数
anan−1⋅⋅⋅a1
a
n
a
n
−
1
·
·
·
a
1
可以通过如下方式表示:
a1∗k0+a2∗k1+⋅⋅⋅+an∗kn−1
a
1
∗
k
0
+
a
2
∗
k
1
+
·
·
·
+
a
n
∗
k
n
−
1
将
k
k
用代入即可。
Code:
C
o
d
e
:
#include<cstdio>
#include<algorithm>
using namespace std;
int b,n;
int main()
{
int cas=1;
while (cas<=100)
{
scanf("%d%d",&b,&n);
int t=1; cas++;
int flag1=0,flag2=0,flag3=0;
for (int i=1;i<=1000;i++)
{
t=t*b%n;
if (t==n-1&&(!flag1))
{
flag1=i;
}
if (t==0&&(!flag2))
{
flag2=i;
}
if (t==1&&(!flag3))
{
flag3=i;
}
if (flag1&&flag2&&flag3) break;
}
if (flag2) printf("Rightmost %d\n",flag2);
if (flag3) printf("Add all %d\n",flag3);
if (flag1) printf("Alternate %d change sign\n",flag1);
if (!(flag1+flag2+flag3))
{
printf("condition not found.\n");
}
printf("\n");
}
}