資訊內(nèi)容
用Scratch巧解數(shù)學(xué)題——判定質(zhì)數(shù)
給你一個(gè)大于1的自然數(shù),請判斷它是合數(shù)還是質(zhì)數(shù)!比如,99991是質(zhì)數(shù)還是合數(shù)?
我們知道,質(zhì)數(shù)就是只有1和它自身兩個(gè)因數(shù)的數(shù)。因此,要判斷一個(gè)大于1的自然數(shù)n是不是質(zhì)數(shù),最簡單的辦法就是看n能不能被2~n-1中的某個(gè)數(shù)整除。只要有一個(gè)數(shù)能被n整除,n就是合數(shù);如果都不能被n整除,n就是質(zhì)數(shù)。比如97,我們就看它能不能被2~96中的某一個(gè)數(shù)整除。
這個(gè)方法說起來很簡單,但是如果給出的數(shù)較大,實(shí)際算起來就沒那么簡單!比如,99991。再比如,1234567891。通過人工計(jì)算來判斷出它們是質(zhì)數(shù)還是合數(shù),那真不是一件容易的事。
能不能編一個(gè)程序讓計(jì)算機(jī)來幫助我們計(jì)算呢?當(dāng)然可以!根據(jù)上述算法就可以畫出程序流程圖。
有了流程圖,編寫代碼就很簡單了。流程圖就是編程的施工圖。學(xué)習(xí)編程,畫流程圖是基本功。一定要養(yǎng)成無流程圖不寫代碼的好習(xí)慣!流程圖本身就是編程思路的體現(xiàn),通過畫流程圖也可以進(jìn)一步整理我們的思路。
程序?qū)懞煤?,還要調(diào)試,看看功能是否正常。通過調(diào)試,我們會(huì)發(fā)現(xiàn)對于不太大的數(shù),這個(gè)程序很快就能給出結(jié)果,簡直是秒殺!但如果你輸入1234567891,程序運(yùn)行很久才會(huì)出結(jié)果。這種狀況,其實(shí)也是不能接受的。正如你玩一個(gè)游戲,它老是卡頓,你還會(huì)玩嗎?一個(gè)好的程序,只考慮功能的正確性是不夠的,還要考慮它的運(yùn)行速度,它占用計(jì)算機(jī)內(nèi)存的情況。當(dāng)然,這是對高級(jí)程序員的要求。我們在學(xué)習(xí)編程的時(shí)候,更多地還是考慮功能的正確性。
運(yùn)行速度過慢,怎么辦?重新設(shè)計(jì)呀!太慢,嚴(yán)格來講就是不符合設(shè)計(jì)要求。你必須重新考慮程序的架構(gòu)和實(shí)現(xiàn)算法。
要判定一個(gè)數(shù)n是不是質(zhì)數(shù)其實(shí)不需要一直試到n-1,到n的算術(shù)平方根(要取整,絕大多數(shù)程序設(shè)計(jì)語言都有取整運(yùn)算符或者功能塊)就可以了!其流程圖與之前的算法基本相同,不再贅述。直接上程序代碼。
運(yùn)行程序,按照提示輸入1234567891。程序很快就給出結(jié)果了。由此可見,在編程中,算法是很重要的。隨著學(xué)習(xí)的深入和編制的程序越來越復(fù)雜,我們就能更深地體會(huì)到:算法是程序的靈魂。
計(jì)算機(jī)是不是很強(qiáng)大呀!但前提是你要會(huì)編程呀!只有會(huì)編程,你才能讓計(jì)算機(jī)替你解決問題呀!別擔(dān)心,編程其實(shí)也沒有想象那么難!只要你愿意學(xué)。
Scratch雖然是專門為少兒設(shè)計(jì)的編程語言,但其功能還是非常強(qiáng)大的,不僅可以創(chuàng)建動(dòng)畫、游戲和故事書,還可以用來求解數(shù)學(xué)題,實(shí)現(xiàn)一些數(shù)學(xué)算法。學(xué)過Scratch后,將來再學(xué)習(xí)其他高級(jí)程序設(shè)計(jì)語言,理解起來也會(huì)更加順暢,更加容易!
聲明:本文章由網(wǎng)友投稿作為教育分享用途,如有侵權(quán)原作者可通過郵件及時(shí)和我們聯(lián)系刪除
