hdu 6441 費馬大定理 勾股數 數學

2022-05-09 18:53:22 字數 1280 閱讀 4125

題意是給定 n 和 a,問是否存在正整數 b,c 滿足:a^n 

+ b^n == c^n.輸出 b  c,若不存在滿足條件的 b,c,輸出 -1 -1。

當 n > 2 時,由費馬大定理,不存在正整數 a,b,c 滿足 a^n + b^n == c^n ,也就是說當 n 大於 2 時,只能輸出 -1 -1 。接下來問題就可以變成 n 分別取 0,1,2 的情況了。

當 n == 1 時,由於只要輸出任意一組合理解即可,則 b 為 1 ,c 為 a + 1 即可。

當 n == 0 時,條件變成了 1 + 1 == 1,無法滿足,輸出 -1 -1.

當 n == 2 時,條件變成了 a^2 + b^2 == c^2 也就是在已知 乙個勾股數的情況下,求其他兩個勾股數。

勾股數:2 * k + 1,2 * k * ( k + 1 ),2 * k * ( k + 1 ) + 1( k 為正整數 )

當 a 為奇數時,則 a = 2 * k + 1 ,解得 k 的值,則 b = 2 * k * ( k + 1 ),c = 2 * k * ( k + 1 ) + 1;

當 a 為偶數時,則 a 可能等於 p * ( 2 * k + 1 ),也可能等於 2 * k * ( k + 1 ) ,

檢查 a 是否可以被 4 整除,若能,則屬於後一種情況,p = a / 4,那麼 b = p * 3,c = p * 5;(此處算 k 太麻煩,直接用 3,4,5 這組勾股數及其倍數)

若 a 不能被 4 整除,令 a 不斷除以 2 ,若在 a 變成 1 之前,a 可以為奇數,那麼就屬於前一種情況,即 a = p * ( 2 * k + 1 ) ,p = a / a'( a' 即為 a 多次除以 2 變成的非 1 奇數,所以在除以 2 之前要把 a 的值賦給乙個變數),

求出 k 的值,

則 b =( 2 * k * ( k + 1 ) ) *  p ,c = ( 2 * k * ( k + 1 ) + 1) * p;

若上述情況都得不到 b,c,則輸出 -1 -1 即可。

**如下:

1 #include2

using

namespace

std;

3__int64 p,a,n,wu;

4int

main()522

else

2332}33

}34}35

return0;

36 }

view code

這題在 vjudge 上用 int 能過,但在 hdu 上會 wa,要換成 long long 才能過......

費馬大定理

本篇部落格主要講解乙個比較牛掰的定理 費馬大定理,為什麼這麼牛掰呢,因為這個問題困擾了困擾了整個世界三百多年,直到上個世紀90年代終於被牛掰的人安德魯 懷爾斯給證明出來,你說這個定理牛不牛掰。那麼這個牛掰的定理講的是啥?這就是困擾世界三個多世紀的問題,瞅著是不是挺簡單的,但是證明那就呵呵了,在下能力...

費馬大定理與費馬小定理

費馬大定理,又被稱為 費馬最後的定理 由17世紀法國數學家皮耶 德 費瑪提出。他斷言當整數n 2時,關於x,y,z的方程 xn yn zn 沒有正整數解。德國佛爾夫斯克曾宣布以10萬馬克作為獎金獎給在他逝世後一百年內,第乙個證明該定理的人,吸引了不少人嘗試並遞交他們的 證明 被提出後,經歷多人猜想辯...

費馬小定理 hdu 4196

據說這題非常卡時間 題目 用不大於n內的所有數去組成乙個盡可能大的完全平方數。完全平方數,顯然是所有的素因子的個數都是偶數,便取n!的所有素因子的個數,便 有了初步想法,算出n!的什麼素因子個數,奇數的就捨去乙個,偶數的全要,然後再全部乘起來,可是因為規模很大,即使快速冪乘也是會超時。於是考慮把n!...