【(a+b)%d=(a%d+b%d)%d】poj 2551 Ones
網上有一個很好的方法,大概的思想就是
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; }
最後更新:2017-04-03 05:40:02