不確定有多少筆資料,但以我的解法 AC/10ms,應該筆數不多吧
==================== 解法 ===========
篩法建質數表 pr[],因要判定某數是否質數,篩法的記號 c[]留著用
n若是偶數,一定可以分成兩個質數,n/2最接近的奇數 i 往下找 j,n-j 皆質數{3<=j<=i的奇數} 印出2個 j,n-j
n若為奇數:(1) n-2也是質數,則印出 2個 2,n-2
(2) n-2非質數,切成3個奇數,從最接近 n/3的質數 i往下找所有 j + nj{nj是可以拆成2個質數的偶數}
又若 n可以拆成三個相等的質數,直接印出,不用跑迴圈
例如 有一筆 999997 拆成三個質數,我的方法是
i=999997/3往下取奇數 i = 333331 雙迴圈 從j<=i 的質數{質數表往下找},nj=n-j, 內迴圈找所有 k<=nj/2 的質數,
若 j,k,nj-k皆為質數,算出其乘積 p ,保留最大的 p 及相對應的 j,k,nj-k{我用 ans[3]存}
輸出時 ans[] 要 sort
================ 這解法 感覺不是很好,筆數一多應該過不了,但試試看就 AC了,不曉得有沒有更好的解法
不確定有多少筆資料,但以我的解法 AC/10ms,應該筆數不多吧
==================== 解法 ===========
篩法建質數表 pr[],因要判定某數是否質數,篩法的記號 c[]留著用
n若是偶數,一定可以分成兩個質數,n/2最接近的奇數 i 往下找 j,n-j 皆質數{3<=j<=i的奇數} 印出2個 j,n-j
n若為奇數:(1) n-2也是質數,則印出 2個 2,n-2
(2) n-2非質數,切成3個奇數,從最接近 n/3的質數 i往下找所有 j + nj{nj是可以拆成2個質數的偶數}
又若 n可以拆成三個相等的質數,直接印出,不用跑迴圈例如 有一筆 999997 拆成三個質數,我的方法是
i=999997/3往下取奇數 i = 333331 雙迴圈 從j<=i 的質數{質數表往下找},nj=n-j, 內迴圈找所有 k<=nj/2 的質數,
若 j,k,nj-k皆為質數,算出其乘積 p ,保留最大的 p 及相對應的 j,k,nj-k{我用 ans[3]存}
輸出時 ans[] 要 sort================ 這解法 感覺不是很好,筆數一多應該過不了,但試試看就 AC了,不曉得有沒有更好的解法
不確定有多少筆資料,但以我的解法 AC/10ms,應該筆數不多吧
==================== 解法 ===========
篩法建質數表 pr[],因要判定某數是否質數,篩法的記號 c[]留著用
n若是偶數,一定可以分成兩個質數,n/2最接近的奇數 i 往下找 j,n-j 皆質數{3<=j<=i的奇數} 印出2個 j,n-j
n若為奇數:(1) n-2也是質數,則印出 2個 2,n-2
(2) n-2非質數,切成3個奇數,從最接近 n/3的質數 i往下找所有 j + nj{nj是可以拆成2個質數的偶數}
又若 n可以拆成三個相等的質數,直接印出,不用跑迴圈例如 有一筆 999997 拆成三個質數,我的方法是
i=999997/3往下取奇數 i = 333331 雙迴圈 從j<=i 的質數{質數表往下找},nj=n-j, 內迴圈找所有 k<=nj/2 的質數,
若 j,k,nj-k皆為質數,算出其乘積 p ,保留最大的 p 及相對應的 j,k,nj-k{我用 ans[3]存}
輸出時 ans[] 要 sort================ 這解法 感覺不是很好,筆數一多應該過不了,但試試看就 AC了,不曉得有沒有更好的解法
DP它 :D