整数分解为2的幂 数学

任何正整数都能分解成2的幂,给定整数N,求N的此类划分方法的数量!由于方案数量较大,输出Mod 1000000007的结果。 
比如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 
  =1+2+4 
Input输入一个数N(1 <= N <= 10^6)Output输出划分方法的数量Mod 1000000007Sample Input

7

Sample Output

6

找规律
#include<iostream>
#include<cstring>
using namespace std;
//每个点最多翻转一次
const int MAXN = 1e6 + 3;
#define INF 0x3f3f3f3f
/*
ans(k) = ans(k-1)+ ans(k-2) + ans(k-4)
*/
int a[MAXN];
int main()
{
    int i = 0;
    a[1] = 1;
    for(int i= 2; i < MAXN ;i++)
    {
        if(i&1)
            a[i] = a[i-1];
        else
            a[i] = (a[i/2] + a[i-1])%1000000007;
    }
    ios::sync_with_stdio(0);
    int n;
    while(cin>>n)
        cout<<a[n]<<endl;
}

#include<iostream>#include<cstring>usingnamespacestd;
//每个点最多翻转一次constint MAXN = 1e6 + 3;
#define INF 0x3f3f3f3f/*
ans(k) = ans(k-1)+ ans(k-2) + ans(k-4)
*/int a[MAXN];
int main()
{
int i = 0;
a[1] = 1;
for(int i= 2; i < MAXN ;i++)
{
if(i&1)
a[i] = a[i-1];
else
a[i] = (a[i/2] + a[i-1])%1000000007;
}
ios::sync_with_stdio(0);
int n;
while(cin>>n)
cout<<a[n]<<endl;
}

时间: 2024-08-05 11:07:29

整数分解为2的幂 数学的相关文章

数论快速入门(同余、扩展欧几里德、中国剩余定理、大素数测定和整数分解、素数三种筛法、欧拉函数以及各种模板)

数学渣渣愉快的玩了一把数论,来总结一下几种常用的算法入门,不过鶸也是刚刚入门, 所以也只是粗略的记录下原理,贴下模板,以及入门题目(感受下模板怎么用的) (PS:文中蓝色字体都可以点进去查看百度原文) 附赠数论入门训练专题:点我打开专题(题目顺序基本正常,用以配套数论入门) 一.同余定理 简单粗暴的说就是:若 a-b == m 那么 a%m == b%m 这个模运算性质一眼看出...直接上入门水题: Reduced ID Numbers 附AC代码(这个也没啥模板....知道就好) #inclu

Miller-Rabin 素性测试 与 Pollard Rho 大整数分解

\(\\\) Miller-Rabin 素性测试 考虑如何检验一个数字是否为素数. 经典的试除法复杂度 \(O(\sqrt N)\) 适用于询问 \(N\le 10^{16}\) 的时候. 如果我们要把询问范围加到 \(10^{18}\) ,再多组询问呢? Miller 和 Rabin 建立了Miller-Rabin 质数测试算法. \(\\\) Fermat 测试 首先我们知道费马小定理: \[ a^{p-1}\equiv 1\pmod p \] 当且仅当 \(p\) 为素数时成立. 逆命题是

简单的整数分解模板

将整数分解为素因子 //将素因子全部分解出来 template<class T> void Reduce(T x,T *p,T &tot){ tot=0; for(T i=2;i*i<=x;i++){ while(x%i==0) { x/=i; p[tot++]=i; } } if(x>1) p[tot++]=x; } 将整数分解为幂的形式 template<class T> void Reduce(T x,T *p,T &tot){ tot=0; fo

[水+整数分解] poj 1365 Prime Land

题意: 给2*n个数,输入的这些数构成 sum=(a[1]^b[1])*(a[2]^b[2])... 其实就是整数分解完的数. 然后让你输出分解sum-1的结果. 从大到小. 思路: 就是输入麻烦点. 注意题目说了1的时候要输出空行. 代码: #include"cstdlib" #include"cstdio" #include"cstring" #include"cmath" #include"queue"

poj 2992 Divisors 整数分解

设m=C(n,k)=n!/((n-k)!*k!) 问题:求m的因数的个数 将m分解质因数得到 p1有a1个 p2有a2个 .... 由于每个质因数可以取0~ai个(全部取0就是1,全部取ai就是m)最后的答案就是(a1+1)*(a2+1)*....* 注意不能直接将m分解,因为太大,所以要先分解n,n-k,k,根据他们再来加减. #include <iostream> #include <cstdio> #include <cmath> #include<cstr

HDU 3864 D_num Miller Rabin 质数判断+Pollard Rho大整数分解

链接:http://acm.hdu.edu.cn/showproblem.php?pid=3864 题意:给出一个数N(1<=N<10^18),如果N只有四个约数,就输出除1外的三个约数. 思路:大数的质因数分解只能用随机算法Miller Rabin和Pollard_rho,在测试多的情况下正确率是由保证的. 代码: #include <iostream> #include <cstdio> #include <cstring> #include <c

VJ 1033 整数分解(版本2)

描述 整数分解(版本2) 一个正整数可以分解成若干个自然数之和.请你编一个程序,对于给出的一个正整数n(1<=n<=1500),求出满足要求的分解方案,并使这些自然数的乘积m达到最大. 例如n=10,则可以分解为2+2+3+3,乘积m=2*2*3*3=36 格式 输入格式 一个正整数n 输出格式 输出分解的自然数的最大乘积m 样例1 样例输入1[复制] 10 样例输出1[复制] 36 提示 简单题,所有数据随机生成 题解 : n <= 3 时, 答案最大为n,即不拆. n > 3

POJ1811_Prime Test【Miller Rabin素数测试】【Pollar Rho整数分解】

Prime Test Time Limit: 6000MS Memory Limit: 65536K Total Submissions: 29193 Accepted: 7392 Case Time Limit: 4000MS Description Given a big integer number, you are required to find out whether it's a prime number. Input The first line contains the num

POJ2429_GCD &amp;amp; LCM Inverse【Miller Rabin素数測试】【Pollar Rho整数分解】

GCD & LCM Inverse Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 9756Accepted: 1819 Description Given two positive integers a and b, we can easily calculate the greatest common divisor (GCD) and the least common multiple (LCM) of a and b.