一道關於梅森素數的題,這裡需要先得出乙個猜想,那就是只有梅森素數的一次冪的乘積的因子之和才能為2的次冪。這個猜想我不會證明,我只是測了下前100個素數,然後就覺得這個猜想應該是正確的,結果也確實如此。(求數學帝證明)
2^31內僅有8個梅森素數,只要將每個pi因式分解,直接剔除那些既不是梅森素數,也不是梅森素數乘積的數,注意梅森素數的冪次不能超過1,所以必須選擇剩下的可行的數的組合使得到的2的冪次最高,通過乙個2維dp很容易得到。
#include #include #include #include using namespace std;
typedef long long ll;
int mersome[8]=;
int p[8]=;
int st[110],val[110];
int dp[110][1<<10];
int vis[110][1<<10];
int c;
int dfs(int dep,int state)
int main()
else if(tmp==1)
{s^=(1<
數學專項matrix UVa 11149
典型的倍增法的應用,這裡我用了遞迴的方式實現,這樣比較直觀,也比較好寫 主要是因為迭 的一直wa 注意輸入的時候需要取模。include include include using namespace std const int maxn 50 typedef int matrix maxn max...
數學專項number theory LA 3262
題意就是找出n 1 n 65536 的乙個倍數,要求組成該數的不同數 0 9 最少,多解時,輸出最小的。學過離散的都知道,通過鴿巢原理,組成解的不同數最多為2,且每種組合最多經歷n個狀態,所以暴力列舉所有組合的複雜度為65536 100,完全可以接受。這裡需要自己手寫乙個高精度類以比較大數,先列舉乙...
樹狀陣列專項
poj 2352 此題一開始理解錯了乙個地方,而且一開始也沒很好的理解樹狀陣列,做了很長時間。其實此題的輸入是有規律的,即一直按照x,y遞增的規律。所以,判斷第i個輸入,只需要判斷 前i 1個元素中x的值,而不用考慮y,因為y一直是遞增輸入的。所以用乙個樹狀陣列來處理x即可。include incl...