UVA 10168 把乙個數n拆分成4個質數的和

2021-08-25 19:51:56 字數 765 閱讀 6610

題目連線:

題目已經把題意說的很清楚了

就是把乙個數n拆成4個質數的和

資料規模是10^7,所以直接打乙個10^7的素數表是可行的(大概500ms就可以完成)

思路:首先要明確以下觀點:

當n小於等於7的時候不可能有解

這個道理很顯然,因為當n==8的時候可以拆成2+2+2+2(四個最小的素數了)

所以n<8不可能在存在分解方法

故:第一步為判斷n是否大於等於8

那麼剩下就是證明n大於等於8的時候是否一定存在可行解

答案是肯定的!!!!

我的證明非常簡單(之前的方法確實是想複雜了)

當n為乙個偶數的時候,那麼他一定可以分解為兩個偶數的和

而在假設哥德**猜想成立的條件下,偶數是一定可以分解為兩個質數的和的。所以,n也一定能夠分解為4個素數的和

然後就是n為奇數的時候

當n為奇數,我們可以把它拆分為兩個偶數和乙個1的和

進一步猜想,我們一定可以寫成2+3+偶數的形式(這麼做是有原因的!!主要是為了實現方便)

我的**:

#include#include#define maxn 10000001 bool flag[maxn]; int prime[1000000]; int num=0; void init() } } int main() if(n&1) } printf("%d %d %d %d/n",a,b,c,d); } else } printf("%d %d %d %d/n",a,b,c,d); } } return 0; }

判斷乙個數是n的倍數 n 2,3,4,5,9

判斷乙個非零自然數是否是2的倍數的方法 這個數末位上的數字是否是偶數即個位上是0 2 4 6 8的數是2的倍數。判斷乙個非零自然數是否是3的倍數的方法 各個數字上的數字和是否是3的倍數 各個數字上數字遇3就劃掉,最後剩餘的數就是除以3的餘數!判斷乙個非零自然數是否是4的倍數的方法 這個數的末二位上的...

輸入乙個數n,然後列印出2的n次方

輸入乙個數n,列印出2的n次方 有效輸入 n 0 24 用masm6.11編譯器編譯通過 編譯方法 masm l 1.asm link tiny 1.obj code segment assume cs code,ds code 386p org 100h start push cs pop ds ...

求乙個數的質因數(1個或n個)

在做 容斥原理 題時經常需要求出乙個數的質因子,而且不是所求數的位數很多,就是一次求n多數的質因子。下面分別給出兩種型別的 供拋磚引玉。第一種型別 用於每次只能求出乙個數的質因子,適用於題目中給的n的個數不是很多,但是n又特別大的情況。includeint main if n 1 應對 n 103 ...