1樓:
等差數列求和公式:
題中要求連續正數,意味著:公差d=1,起始項a1>0,項數n>1。
已知Sn,設為定值,則n越小則a1越大,a1越小則n越大,反之亦然。n最小為2,n最大時a1為最小的1。嘗試所有的n值,計算a1,判斷它是正整數即可。
#include
#include
#include
// 分析乙個數是否能表示成連續正整數和
bool
is_num_seq
(intSn,
int*
ret_a1
,int
*ret_n)}
return
false;}
intmain
(void
)else
}printf("
\n");fflush
(stdout);}
system
("PAUSE"
);// 暫停
return0;
}以上是傳統的思考邏輯和實現。注意到 @Idris2 提出的「除了1,2,4,...這樣2^n的數都行」,雖然不明白如何分析出來,但測試發現的確如此。按照這一邏輯實現如下:
#include
#include
#include
// 分析乙個數是否能表示成連續正整數和
bool
is_seq
(intx)
return
false;}
intmain
(void
)else
printf("
\n");fflush
(stdout);}
system
("PAUSE"
);// 暫停
return0;}
2樓:
設這一系列數為n+1,n+2...n+a,那麼他們的和為a(2n+a+1)/,可見兩個數為一奇一偶,也就是說只要乙個數的質因子有奇數就可以,哪些數滿足這個條件呢?除了1,2,4,...
這樣2^n的數都行
3樓:0x76
根據等差數列求和公式,可得
2N = 2 * n * a + n * (n - 1)變換一下可得
a = (N / n) - ((n - 1) / 2)其中,N為傳入整數,n為連續數字的個數,a為第乙個數字。
那麼如果乙個N滿足條件,那麼就可以找到上面方程的整數解。
那麼可根據上式對 n 遍歷,當 n 為奇數時,判斷 N 是否為 n 的倍數;當 n 為偶數時,判斷 2 * (N % n) 是否等於 n 即可。n 從 2 開始到 n * (n - 1) > 2N 為止。
複雜度為O(sqrt(N)).
「不能被定義」是一種定義嗎?
執悲今厄 又乙個因否定而產生的糾結。否定果真是萬惡之源 如果乙個否定句不能被轉化為肯定句來描述,那麼這樣的否定句就是不成立的。 青春 不能被定義也是一種定義,這是乙個悖論,即這裡面有邏輯矛盾。這就說明不存在不能被定義的事物。相當於用反證法證明了一切事物都可被定義。 Piper 如果把定義這個概念畫乙...
怎麼理解「vector不是一種資料型別,而只是乙個類模板,可用來定義任意多種資料型別」這句話?
定義乙個int型別 vector不是一種資料型別具體表現就是,不能用vector i的方式定義乙個列表。inti 模板本身就是用於擴充套件支援不同型別的,只要是模板,肯定就是多型別的,否則也沒必要寫模板了。vector i 乙個int型別vector vector c 乙個字元型別vector 基礎...
數框框是怎樣一種體驗,用著CPU顆數核數很多的電腦是怎樣一種體驗?
魯哲 x5650雙路,24core,64g記憶體,薅資本主義羊毛配了1TB ssd。大部分時間真心用不上 在家待命,遠端開機跑一些東西。靈魂如下 肉體如下 公司有30臺16core 64G的vpc 組了個spark cluster,任務一多還是要一堆任務排隊等資源,還有幾台自建伺服器,20核還是多少...