1、首先,唯有偶数和5的倍数不存在这样的N,所以先判断K不为这两种数,再用二分快速幂去求余即可。
class Solution {
public:
int smallestRepunitDivByK(int k) {
if(k==1) return 1;
else if(!(k&1)) return -1;
else if(k%5==0) return -1;
int cnt=0;
int sum=0;
while(1)
{
sum=(sum+ten(10,cnt,k))%k;
++cnt;
if(!sum) return cnt;
}
return -1;
}
int ten(long long t,int n,int k)
{
if(n==0) return 1%k;
int sum=ten(t*t%k,(n>>1),k);
if(n&1) sum=sum*t%k;
return sum;
}
};