愛因斯坦曾經提出過這樣一道有趣的數學題:有乙個長階梯,若每步上2階,最後剩下1階;若每步上3階,最後剩2階;若每步上5階,最後剩下4階;若每步上6階,最後剩5階;只有每步上7階,最後剛好一階也不剩。請問該階梯至少有多少階。
我們假設階梯共有n階,我們可以很快的列出下面的式子:
n mod 2 = 1
n mod 3 = 2
n mod 5 = 4
n mod 6 = 5
n mod 7 = 0
用「強」解:
#include int jieti(void);
int main(int argc, char *argv)
int jieti(void)
return result;
}
轉化為一道數學問題:有乙個數除以2、3、4、5、6,餘數都為1,除以7則無餘數,這個數最小是多少?
由 n mod 2 = 1
n mod 3 = 2以上我們可以得出乙個結論,即n總是比2,3,5,6的公倍數小1,為什麼呢?n mod 5 = 4
n mod 6 = 5
n mod 7 = 0
因為,我們通過上式,可以有 2|(n+1),3|(n+1),5|(n+1),6|(n+1),7|n
可得,[2,3,5,6]|(n+1)
即,2,3,5,6的最小公倍數可以
整除n+1,而[2,3,5,6]=30
所以30|n+1,由帶餘除法可以有,30q=n+1,=> n=30q-1(q為自然數且不為0)
固有29+30*num=n ==> 29+3030*3=7*19=119=n
即n=119
#include int upstair(void);
int main(int argc, char *argv)
int upstair(void)
return result;
}
最後,其實中國剩餘定理也能很輕鬆解決這類問題。 愛因斯坦階梯問題
include include intmain return0 還有一種思路,複習做題時遇到的tat int ladders 7 while ladders 3 2 ladders 5 4 ladders 6 5 ladders 14 printf d n ladders 窮舉遍曆法,效率太低,改進...
python 愛因斯坦階梯問題
解釋 設有台階若干,每跨2階,最後餘1階,跨3階餘2階,跨5階餘4階,跨6階餘5階,跨7階正好到達階梯頂部。分析 先假設有i,餘2等於1,餘3等於2,以此類推。1 i 2 1and i 3 2and i 5 4and i 6 5and i 7 0符合以上 即可。可以使用while和for語句進行書寫...
C語言 愛因斯坦的階梯問題
愛因斯坦曾經提出過這樣一道有趣的數學題 有乙個長階梯,若每步上2階,最後剩下1階 若每步上3階,最後剩2階 若每步上5階,最後剩下4階 若每步上6階,最後剩5階 只有每步上7階,最後剛好一階也不剩。請問該階梯至少有多少階 int i 7 int times 1000 while i 2 1 i 3 ...