一個人a年b月c日出生,a,b,c三數的乘積為428575,這個人是什麼時候出生的?
三個數乘積的尾數為5,說明三個數里,有一個數尾數是5,而剩下兩個數,都是奇數,不可能是偶數。
月份的取值可能性最少,從這裡開始分析。
428575的各位數相加為31,不是3的倍數。而這個數隔位相加並不相等,說明也不是11的倍數。說明乘數里沒有3,也沒有11。
428575÷5=85715,依然是5的倍數,說明兩種可能,一種是數字里有25的倍數,另一種可能是兩個數都是5結尾。
85715÷5=17143,我們用奇數測試一下,很容易發現它是7的倍數。
17143÷7=2449
2449÷31=79
428575=1×5×5×7×31×79
現在我們來看一下月份。排除掉偶數數,排除掉3、9、11,我們還剩下1、5、7。
如果月份是1,即使日期是25,那年份也是17143,這很顯然是不可能的。排除。
如果月份是5,在剩下的數字里,能作為日期存在的有5、7、31。不要說還有5乘以7,歷史上根本沒有35號。不難得出,當日期為5或7時,年份依然太大。當日期為31時,年份為5×7×79=2765,顯然也不對。
最後看看月份為7的可能性。
當月份為7時,日期可能為5、25、31。當然了,日期為5直接排除。
如果日期為25,那年份為2449,不對。
如果日期為31,此時年份為25×79=1975,這個數字很符合條件了。
於是得出答案:1975年7月31日。
其實這算是很簡單的數學問題。
說簡單,不是因為能不通過計算就一眼看出答案,而是可以簡單粗暴的換成編程的問題,讓計算能力強大的電腦直接給出答案,或者在不存在答案、無解時也能告訴我們。
直接用python寫幾行代碼,簡單粗暴的把 a從1到428575,b從1到12,c從1到31依次試個遍,算是數學上的窮舉法,對於個人而言需要計算428575*12*31=159429900次,一輩子可能都算不完,但電腦一下子就能給出所有結果。
錄製了GIF動圖,有圖有真相。
哪怕這是42萬年後的人類看到,也能輕鬆給出,1975年7月31日——這個我們當下唯一答案除外的其他所有結果。
其實很多問題就是這樣,看起來很複雜很麻煩,卻能巧妙轉化成其他問題,然後輕鬆解決。
通過分解質因數,再結合年份,月,日期的特徵來分析解答,
上面有個哥們用python寫了幾行代碼搞定了,正巧最近在學matlab,拿這試試手。
這個裡面的i就是abc的乘積,分別限定a是正整數、b是1-12的正整數、c是1到31的正整數。輸入i=428575就可以得到結果了。
下面是結果:
顯示的比較亂,分別是年月日,一一對應就行了。
下面可以換一個i,試試365,結果比較少,看的清楚一些
~~~~~~~~~~~~~~~~~~~
分割線
很多人說結果看不清,我也很無奈啊,上傳之前我還看了的,被壓縮了??
再貼張結果圖吧
也就是:1975年7月31日;2449年7月25日;2765年5月31日;12245年5月7日;12245年7月5日;13825年1月31日;17143年1月25日;17143年5月5日;61225年1月7日;61225年7月1日;85715年1月5日;85715年5月1日;428575年1月1日.一共13種
i=365時,3種情況。
即:73年1月5日;73年5月1日;365年1月1日。
再次分割。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
有人問,abc為什麼一定都是奇數?因為428575是奇數,如果有一個為偶數,那麼乘積就是偶數。
看到這一道題,其實有很多的解決辦法,對於不同人來說,不等式方程就能解決;對於程序員來說,一段C代碼輕鬆解決。如果這是一道小學題,可能還有更巧妙的辦法,所以,aliquis有人科技決定針對這一道題做個各部門結題對比。
1.首先上場的是原欄目『電影吐槽姐「的主持人。。。她家上高中的兒子,不等式方程解決方案:我們知道,月份應該在1~12之間;日應該在1~31之間,且因為1、3、5、7、8、10、12為大月,31天,4、6、9、11為小月,僅30天,閏年4年一次,2月有29天,否則僅有28天。
所以b∈【1,12】;c∈【1,31】(特殊月份暫時忽略)
以此來看,除了年份無法確定,月與日都確定了下來,但是我們知道無論怎麼相乘,年月日必須是整數集合才合理。
∵a×b×c=428575 且【1,12】;c∈【1,31】,abc∈N*
∴b只能為1月/5月/7月
那麼如果b=1,則c可以等於1、5、7、25、31,則a=428575、85715、61225、17143、13825
∴以此類推,可以得到13個符合的日期,由於本題目並沒有規定這個人是現在存在還是未來出生並存在,所以以下答案均符合本題(題目嚴謹的重要性)
428575年1月1日、85715年1月5日、61225年1月7日、17143年1月25日、13825年1月31日
85715年5月1日、17143年5月5日、12245年5月7日、2765年5月31日
61225年7月1日、12245年7月5日、2449年7月25日、1975年7月31日
2.接下來是技術部的各位程序猿和直男癌們(別打我。。。)這個問題沒什麼探討的價值,真的,在C里做個窮舉就能輕鬆解決。
#include <stdio.h>
int a,b,c;
int main()
{
for(a=1;a<=428575;a++)
{
for(b=1;b<=12;b++)
{
for(c=1;c<=31;c++)
{
if(a==2 && b>29){}
else if((a==4||a==6||a==9||a==11)&& b>30){}
else if(a*b*c == 428575)
{
printf("%d年,%i月,%i日
",a,b,c);
}
else{}
}
}
}
printf("所有答案已輸出");
return 0;
}
運行結果:
3.講究技巧的小學生做法該是如何呢?首先進行因式分解,
428575 = 79 × 31 × 7 ×5 ×5
∵因子79隻能是組成年份的因子;31*79=2449,不當,因此31隻能是日期。
又∵7 ×5>12
5 ×5>12
∴月份只有7合適。、
剩下的就是年份了79*5*5=1975。
∴綜上所述,這個人的出生日是1975年7月31日。
這三種解法你都學會了嗎?你覺得哪一種解法更方便更簡單呢?歡迎在下方留言討論~
這是一道小學奧數題,屬於分解質因數的應用!
本題難就難在如何把428575分解質因數,可根據數的整除性的特徵,分解如下:
428575=5*5*7*31*79
下面就需對五個質因數組合,組合成三個數的乘積,分別代表年、月、日,並分別滿足如下條件:
『』年『』四位整數,『』月『』在1-12,『』日『』在1-31。
經驗算組合:428575=1975*7*31
綜上:這個人1975年7月31日出生!
最笨的辦法
因為b≥428575÷2017÷31=6.85
所以b(7,8,9,10,11,12)其中8,10,12 可以排除
所以b只能在7,9,11中產生
又因為428575分別除以7,9,11,其中可以整除的只有7,所以b=7
所以a×c=428575÷7=61225
c≥428575÷2017÷12=17.7
所以c(18,19,20,21,22,23,24,25,26,27,28,29,30,31)其中18,20,22,24,26,28,30可以排除
所以c只能在19,21,23,25,27,29,31中產生
61225分別除以19,21,23,25,27,31,其中可以整除的只有25,31
因為61225÷25=2449可以排除,61225÷31=1975
所以a=1975,b=7,c=31
看到有人python 寫了一個,但是效率太低了,我這裡可以用C嘗試,效率很高只要0.4549秒,下面上圖
一個代碼,一個結果,當然還需要剔除非法日期,雖然這個結果沒有非法的,但可以加條件判斷奇數偶數月30 31號及2月的28 29這兩天,也不難,有興趣的可以嘗試一下
有興趣的可以留下生日的乘積或著其他可演算法化條件我可以給你們算一算哦!
很簡單,有很多種答案,第一種就是428575年1月1日。其他的首先設出生月份為X月,從1到12月能被428575除盡的就是1月、5月和7月,那麼拿428575/5=85715,然後看85715尾數是5,那麼能被5除盡的數字必須含有1,5。然後一個月中有這麼幾天含有數字1,5。分別是1,5,11,15,21,25,31。得到的答案有這麼幾個85715年1月5日,85715年5月1日,17143年5月5日,2765年5月31日。拿428575/7=61225同樣的相除這幾天可以得到的答案是:61225年7月1日,61225年1月7日,12245年5月7日,12245年7月5日,2449年7月25日,1975年7月31日。
首先分解因式:428575=5*5*7*31*79
其次估算月日乘積:由於不考慮沒有出生的人,現在大概是2000年(不要在乎那1%的誤差,不影響的)。428575÷2000>200,所以月日乘積至少是200以上,所以僅存在一種可能,就是7月31日。
最後得到年份5*5*79=1975。
推薦閱讀:
※Facebook Edgerank 的演算法是什麼?
※對網傳一道詭異的邏輯問題的解答表示強烈質疑!?
※DES 演算法的設計思路是什麼?
※有關餘數的簡單方法,不知道是新發現還是已知?
※初級程序員,該如何提高?