题目很良心,放在C题的位置,很容易就可以猜出来答案范围在给定的数字范围以内,可以直接暴力,但证明这个题解法的正确性比做这个题难多了,下面是题解的证明
题意:给定一个序列,序列是7,77,777.....,再给定一个值K,问在序列中,第一次出现K的倍数的位置在哪?/或者序列不存在可以整除k的位置,K<=1e6
解法很简单:枚举1-1e6位置的值%k即可,注意大整数%小数需要每加一位都%一次
证明:
将序列上的值通项化:注意到序列可写为:
所以可写出通项公式:L=
问题转化为 找到最小的(i>=1)使得L%K=0
问题可以再次转化为找到最小的(i>=1) 使得: %9k==0
为什么9可以乘过去?,下附证明
现在我们知道:问题可以再次转化为找到最小的(i>=1) 使得: %9k==0
假设k是7的倍数,则可以把7除过去,原理同上,否则,由于7和9k互质,%乘法具有分配律,原式可转化为%9k=0
否则原式转化为%=0
统称上面两个式子为P
则问题转化为%p==0,即%p=1,假设p为2或者5的倍数则模数一定不可能为1,否则,令,X一定和p互质,由欧拉定理,%p一定=1,W为p的欧拉函数(1到p-1中和p互质的数字个数 )而p的欧拉函数大小一定在p的范围里(1e6),故直接枚举即可