网上有一个很好的方法,大概的思想就是
11...11(n个1)的余数=11..1(n-1个1)的余数*10+1。。。
发现聪明人还是多的,他们的详细思路是:
只用余数乘以10+1就可以了。。。
如:3 满足题意能除以它的最小数111 , 答案是3
分析:1%3*10+1=11 j = 1
11%3*10+1=21 j =2
21%3=0 j=3
相当于:1%3
11%3
111%3
其实就是验证 (n%t*10+1)%t 的结果和 (n*10+1)%t 的结果是否一致,n不一定是111..1,经验证,真的是一样的,代码附后,在简化就是 (n%t*10)%t 和 (n*10)%t 的结果一样。。
经验证,这里的10可以为任何正整数。。。其实把n拆成两个数就可以理解了 x+y,x可以被t整除,y是余数
原理就是(a+b)%d=(a%d+b%d)%d
#include"stdio.h"
int main()
{
int n;
int i;
int tmp;
while(~scanf("%d",&n))
{
tmp=1;
for(i=1; ;i++)
{
if(tmp%n==0)
break;
tmp=tmp%n*10+1;
}
printf("%d\n",i);
}
return 0;
}
验证代码:
#include"stdio.h"
int main()
{
int n;
int t;
while(~scanf("%d%d",&n,&t))
{
printf("%d\n",(n%t*10+1)%t);
printf("%d\n",(n*10+1)%t);
}
return 0;
}