1. 程式人生 > >51Nod-1383-整數分解為2的冪

51Nod-1383-整數分解為2的冪

ACM模版

描述

描述

題解

看到這裡,我們應該可以想到,這是一個數論問題,應該是一個什麼數列,暴力解出來小資料後,在 OEIS 中查看了一下下,發現的確是一個十分有趣的數列——Binary partition function: number of partitions of n into powers of 2.

描述

很明顯,這裡

f[0]=f[1]=1 f(2m+1)=f(2m) f(2m)=f(2m1)+f(m)

所以呢,直接暴力預處理一下,然後詢問什麼輸出什麼即可嘍~~~具體怎麼推出來這個公式我是真不清楚,只會查到公式直接應用,要讓我證明為什麼這樣可解,我實在是心有餘而力不足啊!

程式碼

#include <iostream>

using namespace std;

const int MAXN = 1e6 + 10;
const int MOD = 1e9 + 7;

int n;
int f[MAXN] = {1, 1};

void init()
{
    for (int i = 2; i < MAXN; i++)
    {
        if (i % 2)
        {
            f[i] = f[i - 1];
        }
        else
        {
            f[i] = (f[i - 1
] + f[i >> 1]) % MOD; } } } int main(int argc, const char * argv[]) { init(); while (cin >> n) { cout << f[n] << '\n'; } return 0; }

相關推薦

51nod 1383 整數分解2(數列,也可以自己根據觀察找規律推理得到遞推公式)

描述: 組合數學生成函式 1383 整數分解為2的冪 1 秒   131,072 KB   80 分   5 級題 任何正整數都能分解成2的冪,給定整數N,求N的此類劃分方法的數量!由於方案數量較大,輸出

51Nod-1383-整數分解2

ACM模版 描述 題解 看到這裡,我們應該可以想到,這是一個數論問題,應該是一個什麼數列,暴力解出來小資料後,在 OEIS 中查看了一下下,發現的確是一個十分有趣的數列——Binary partition function: number of p

51nod 1383 整數分解2(遞推)

Description 任何正整數都能分解成2的冪,給定整數N,求N的此類劃分方法的數量!由於方案數量較大,輸出Mod 1000000007的結果。 比如N = 7時,共有6種劃分方法。 7=1+1+1+1+1+1+1 =1+1+1+1+1+2

51nod 1383 整數分解2

#include<bits/stdc++.h> using namespace std; const int MAXN=1000100; const int mod=1e9+7; int

[51Nod 1383] 整數分解2

Description 任何正整數都能分解成2的冪,給定整數N,求N的此類劃分方法的數量!由於方案數量較大,輸出Mod 1000000007的結果。 比如N = 7時,共有6種劃分方法。

51nod-1383 整數分解2

原題連結  收藏  關注 任何正整數都能分解成2的冪,給定整數N,求N的此類劃分方法的數量!由於方案數量較大,輸出Mod 1000000007的結果。 比如N = 7時,共有6

[51Nod 1048] 整數分解2 V2

Description 任何正整數都能分解成2的冪,給定整數N,求N的此類劃分方法的數量! 比如N = 7時,共有6種劃分方法。 7=1+1+1+1+1+1+1 =1+1+1+1+1+2 =1+1+1+2+2

51NOD 1383整數分解2

DH ---------以上初三THU/PKU大爺---- Alan_cty LYD XHM HZJ ZZ ---以下是大神%-- YMW Samjia2000 werkeytom_ftd Crazy_czy WorldWide_D Yxuan

51Nod 1383&1048 整數分解2

題目 任何正整數都能分解成2的冪,給定整數N,求N的此類劃分方法的數量。 V1:n≤106n≤106。要對答案模1e9+71e9+7。 V2:n≤1030n≤1030。將整個答案輸出。 解題

[51nod1383&1048]整數分解2

題目大意 任何正整數都能分解成2的冪,給定整數N,求N的此類劃分方法的數量! 比如N = 7時,共有6種劃分方法。 7=1+1+1+1+1+1+1 =1+1+1+1+1+2 =1+1+1+2+2 =1+2+2+2 =1+1+1+4

[51nod1138]正整數分解幾個連續自然數之和

sqrt esp 連續 奇數 mes 判斷 -i 兩個 註意 解題關鍵:註意為什麽上界是$\sqrt {2n} $ 因為函數是關於m的遞減函數,而結果必須為正整數 $a = \frac{{2n + m - {m^2}}}{{2m}} = \frac{n}{m} + \f

PTA7-37 整數分解若干項之和(20 分)超級詳解

將一個正整數N分解成幾個正整數相加,可以有多種分解方法,例如7=6+1,7=5+2,7=5+1+1,…。程式設計求出正整數N的所有整數分解式子。輸入格式:每個輸入包含一個測試用例,即正整數N (0<N≤30)。輸出格式:按遞增順序輸出N的所有整數分解式子。遞增順序是指:

一個正整數分解幾個連續的正整數之和

題目: 給定你一個數字 如:15 15可分解為 7+8 4+5+6 1+2+3+4+5 再如: 8 8不可分解為任何連續的正整數之和 所以輸出NONE 此題就是給定一個數字如果這個數字可以分解為

7-37 整數分解若干項之和(20 分)

題目連結(組合版):點選開啟連結題目大意:略。解題思路:此方法僅限於輸出組合情況,計數的話會TLE。附加題目(計數版):點選開啟連結AC 程式碼(組合版)#include<bits/stdc++.

PTA 7-12 整數分解若干項之和(20 分)

將一個正整數N分解成幾個正整數相加,可以有多種分解方法,例如7=6+1,7=5+2,7=5+1+1,…。程式設計求出正整數N的所有整數分解式子。 輸入格式: 每個輸入包含一個測試用例,即正整數N (0 < N ≤ 30)。 輸出格式: 按遞增順序輸出N的所有整數分解式

整數分解n個連續正整數

思路:等差數列求和: sn=a1*n+n*(n-1)*d/2 在這裡d為1 #include<stdio.h> //#define N 1000 #define M 10 void print(int k) {int sn=0,t=0;for(int a1=1;

7-1 整數分解若干項之和(20 分)(dfs)

思路:不帶標記的dfs,只要沒有超過和就不斷dfs直到超過了之後向前回溯。 #include<stdio.h> #include<stdlib.h> #include<string.h> #include<math

(PTA)7-1 整數分解若干項之和

題目 將一個正整數N分解成幾個正整數相加,可以有多種分解方法,例如7=6+1,7=5+2,7=5+1+1,…。程式設計求出正整數N的所有整數分解式子。 輸入格式: 每個輸入包含一個測試用例,即正整數N (0 輸出格式: 按遞增順

pta 5-37 整數分解若干項之和 (遞迴)

5-37 整數分解為若干項之和   (20分) 將一個正整數N分解成幾個正整數相加,可以有多種分解方法,例如7=6+1,7=5+2,7=5+1+1,…。程式設計求出正整數N的所有整數分解式子。 輸入格式: 每個輸入包含一個測試用例,即正整數N (0<<

面試總結:任意一個整數分解幾個連續正整數之和

       前陣子參加了國內某一大公司的面試。到了之後,人家不問出身,不問來歷,就直接開機讓我上機程式設計。因為是第一次在面試時上機操作,儘管題目不是很難,但是由於沒搞清楚機考和筆試的區別,導致最後面試失敗。現在總結一下自己在機考時碰到的一些問題,以免自己以後再犯同樣的錯