題目要求符合等式的數,我們首先要做的就是分析這個數:
對於這個等式,我們可能什麼都看不出來,左邊很難化簡的樣子,所以我們就要想到通過變化怎麼樣把右邊化成和左邊形式差不多的樣子。結合組合數我們想到二項式定理,展開得到
左邊等於右邊的話我們可以得到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這個值最大。思路 首先要判斷一下這個圖是不是聯通的,用並查集就好了,然後有個注意點就是可能是單個獨立點 然後再判斷是不是尤拉通路,不是也不行 最後計算,最後如果是尤拉迴路還要...