問題描述:在做篩法求質數的問題時,在删除非質數的資料時,有很多是重複删除的。例如,如果有一個數是3x7x17x23,那麼在删除3的倍數時會删除它,删除7,17與23的倍數時也都會删除它。請寫一個程式,在删除非質數時"絕對"不做重複的工作。
思路:有一個因式分解定理:任何一個合數都可以分解成若幹個質數相乘的形式。那麼,num一定可以分解成p的i次方乘以q的形式(p,q是質數且p<q)。是以,需要去除的數就變成了p的2次方,p的3次方,p的4次方......以及p的i次方乘以q,i=1,2,3.......p和q的取值是從小到大的沒有被去除的數,是以很容易就可以寫出如下的程式。