HDU2683 尤拉完全數

2021-09-29 04:42:40 字數 1707 閱讀 7088

題目要求符合等式的數,我們首先要做的就是分析這個數:

對於這個等式,我們可能什麼都看不出來,左邊很難化簡的樣子,所以我們就要想到通過變化怎麼樣把右邊化成和左邊形式差不多的樣子。結合組合數我們想到二項式定理,展開得到

左邊等於右邊的話我們可以得到g(n)=2*n,因為n本身為自身的因子,那麼n的小於自身的因子之和為自身說明n為完全數。

所以問題轉換為如何求完全數。

由數論知識得任何乙個完全數都可以寫成 2p-1 *(2p-1)的形式,其中(2p-1)為素數(也叫做梅森素數)

梅森素數的條件為p為素數。

由以上(我靠比賽我到哪去找這些知識點),我們可以找到所有的完全數(其實也沒有幾個)

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace std;

typedef

long

long ll;

const

int maxn=

1e5+5;

ll mult

(ll x,ll y,ll p)

ll quick_pow

(ll a,ll b,ll p)

return ret;

}bool

miller_rabin

(ll n);if

(n<2)

return

false;if

(n==2)

return

true

;for

(int i=

0;i(n==prime[i]

)return

true

;elseif(

!(n%prime[i]))

return

false

; ll x=n-1;

while(!

(x&1

)) x>>=1;

for(

int i=

0;i)else

x<<=1;

}if(!flag)

return

false;}

}return

true;}

ll quick_pow

(ll a,ll b)

return ret;

}const

int prime[11]

=;intmain()

} //找到的所有的完全數

6 28

4968128

33550336

8589869056

137438691328

2305843008139952128

*/char cmd[5]

; ll a,b;

const ll ans[8]

=;while(~

scanf

("%s"

,cmd)

)else

}return0;

}

HDU 4002 尤拉函式

比較水的數論題,自己想出來的,就寫了個題解 題意是求 2到n之間 n phi n 為最大值時的n 設 n p1 r1 p2 r2 p3 r3 pk rk 則 phi n n 1 1 p1 1 1 p2 1 1 pk 即求 phi n n 為最小時的n phi n n 1 1 p1 1 1 p2 1 ...

HDU 1286 尤拉函式

對於正整數n,尤拉函式是小於或等於n中與n互質的數的數量。x 來表示,如 8 4,那麼尤拉函式的計算公式為 x n 1 1 p1 1 1 p2 1 1 p3 1 1 pn 其中n為待求的正整數n,pi為p的質因數,注意質因數只算一次。如18 2 3 3 x 18 1 1 2 1 1 3 6 1 質數...

hdu5883 尤拉通路

題意 n個點m條無向邊的圖,找乙個尤拉通路 迴路,下標是p1,p2,p3 pt,然後使得ap1xorap2xor xorapt這個值最大。思路 首先要判斷一下這個圖是不是聯通的,用並查集就好了,然後有個注意點就是可能是單個獨立點 然後再判斷是不是尤拉通路,不是也不行 最後計算,最後如果是尤拉迴路還要...