思考:10的100天之后是星期几?
我们并不急于求出10^100,而是像1,10,100,1000...这样,依次增加0的个数,观察其规律。
0的个数
0 一天以后的星期数 1/7 =0 ...1 1
1 10天以后的星期数 10/7=1....3 3
2 100天以后的星期数 100/7=14 ...2 2
3 1000天以后的星期数 1000/7=142...6 6
4 10000天以后的星期数 10000/7=1428..4 4
5 100000天以后的星期数 100000/7=14285..5 5
6 1000000天以后的星期数 1000000/7=142857..1 1
7 10000000天以后的星期数 10000000/7=1428571..3 3
. .
.
.
余数以1、3、2、6、4、5...的顺序循环,
所以:
10^100天以后的星期天,可以将天数中0的个数除以6,通过所得的余数来判断,即:
100 % 6= 4;
我们并不急于求出10^100,而是像1,10,100,1000...这样,依次增加0的个数,观察其规律。
0的个数
0 一天以后的星期数 1/7 =0 ...1 1
1 10天以后的星期数 10/7=1....3 3
2 100天以后的星期数 100/7=14 ...2 2
3 1000天以后的星期数 1000/7=142...6 6
4 10000天以后的星期数 10000/7=1428..4 4
5 100000天以后的星期数 100000/7=14285..5 5
6 1000000天以后的星期数 1000000/7=142857..1 1
7 10000000天以后的星期数 10000000/7=1428571..3 3
. .
.
.
余数以1、3、2、6、4、5...的顺序循环,
所以:
10^100天以后的星期天,可以将天数中0的个数除以6,通过所得的余数来判断,即:
100 % 6= 4;
故知:答案是星期四
***********************************************修改于:2015年7月31日19:36:33****************************************************************
以上是在程序员的数学一书上看的,用快速幂取余直接求了
int pow_(int a,int k,int p){ //求返回 (a^k)%p, 此题只需调用: pow_(10,100,7) 即可
if(k==0) return 1;
if(k==1) return a%p;
int res=pow_(a,k/2,p);
res=res*res%p;
if(k&1) res=res*a%p;
return res;
}
其实还有 更直接的方法: 用中国剩余定理直接求 : 10^100%7= (10%7)*100%7 =4