sum of powers

题目:已知并且

求最小的正数M,使得ak+1,ak···a0都是整数;

分母求最小公倍数就可以;

注意n^k的系数是C(k+1,1)*b1+(k+1);

注意最大公约数为负数的情况,强制转化为正数,用分子保存整个分数的正负性,因为题目要求最小的正数M

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<iomanip>
#include<vector>
#include<map>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long ll;
const int maxn=25;
ll c[maxn][maxn];
struct PP
{ll a,b;//分子、分母
};
PP b[maxn],ans[maxn];
/*ll gcd(ll a,ll b)
{if(b==0)return a;return gcd(b,a%b);
}*/
ll gcd(ll a,ll b)
{if(a%b==0){if(b>0)return b;return -b;}return gcd(b,a%b);
}
PP add(PP a,PP b)//模拟两个分数的加法
{if(!a.a)//如果有一个为零return b;if(!b.a)return a;ll temp=a.b/gcd(a.b,b.b)*b.b;//求出分母的最小公倍数PP res;res.a=temp/a.b*a.a+temp/b.b*b.a;//分子相加res.b=temp;if(res.a)//约掉最大公约数{ll tt=gcd(res.a,res.b);res.b/=tt;res.a/=tt;}return res;
}
void init()
{memset(c,0,sizeof(c));for(int i=0;i<maxn;i++)//预处理组合数{c[i][0]=c[i][i]=1;for(int j=1;j<i;j++)c[i][j]=c[i-1][j]+c[i-1][j-1];}b[0].a=1;//求伯努利数b[0].b=1;for(int i=1;i<=20;i++)//用递推关系求{PP temp;temp.a=0;temp.b=0;for(int j=0;j<i;j++){PP tt=b[j];tt.a=tt.a*c[i+1][j];if(tt.a){ll te=gcd(tt.a,tt.b);tt.a/=te;tt.b/=te;}temp=add(temp,tt);}temp.a=-temp.a;temp.b*=c[i+1][i];if(temp.a){ll te=gcd(temp.a,temp.b);temp.a/=te;temp.b/=te;}elsetemp.b=0;b[i]=temp;}
}
int main()
{init();int k;while(~scanf("%d",&k)){ll cur=1;for(int i=0;i<=k;i++){if(i==1){ans[i].a=k+1;//b[1]要加上后面多出来的n^kans[i].b=2;}else{ans[i]=b[i];ans[i].a*=c[k+1][i];}if(ans[i].a)//约分{ll temp=gcd(ans[i].a,ans[i].b);ans[i].a/=temp;ans[i].b/=temp;}elseans[i].b=0;if(ans[i].b)//求分母的最小公倍数cur=cur/gcd(cur,ans[i].b)*ans[i].b;}printf("%lld ",cur*(k+1));for(int i=0;i<=k;i++)//求出通分后每一项的系数{if(ans[i].b)ans[i].a=cur/ans[i].b*ans[i].a;}for(int i=0;i<=k;i++)printf("%lld ",ans[i].a);printf("0\n");//最后一个一定为零}
}

												

自然数幂与伯努利数,分数相加相关推荐

  1. 自然数幂和伯努利数(Bernoulli)

    二项式定理求自然数幂和 由二项式定理展开得 \[ (n+1)^{k+1}-n^{k+1}=\binom {k+1}1n^k+\binom {k+1}2n^{k-1}+\cdots+\binom {k+ ...

  2. 自然数幂和 伯努利数

    假设我们现在要求 G(N,k)=∑N−1i=0ik G(N,k) = \sum_{i = 0}^{N - 1} i^{k} N≤1018,k≤105 N\leq 10^{18},k \leq 10^5 ...

  3. 伯努利数与自然数幂和

    今天我们讨论的问题是如何有效地求自然数的幂和.接下来以3个经典题目为例来讲解. 题目:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemI ...

  4. 【学习笔记】自然数幂和

    温馨提示: 本文文档大小约\(11KB\). 引入 自然数幂和是一个我们从小就耳熟能详的经典问题.定义\(S(n,k)=\sum^{n}_{i=0} i^k\), 显然\(S(n,k)\)为关于\(n ...

  5. 自然数幂和取模问题进一步探究

    在上次的文章 http://blog.csdn.net/acdreamers/article/details/38929067 中,学习了求自然数幂 和的有效方法,并且了解了求伯努利数的优美算法.今天 ...

  6. Easy Summation 假的自然数幂的和

    easy summation 题意:就是求自然数幂的和.注意平常求自然数幂的和当然是用伯努利数,但是本题n很大,k很小,用伯努利数来做会内存超限. 用快速幂暴力求即可. #include<bit ...

  7. 自然数幂和 斯特林数

    2018 UPD: 其实第二类斯特林数做自然数幂和更简单,这里简单写一下: 由一个基本式子出发 nk=∑i=0k{k i}[n]i n^k=\sum_{i=0}^k\big\{^k_{\ i}\big ...

  8. 专题——自然数幂和 详解

    自然数幂和,有许多种解决方法,其中最典型的有下面几种. Description 求 ∑ i = 1 n i k \sum_{i=1}^n i^k i=1∑n​ik 由于答案可能过大,请将其对 1 0 ...

  9. 自然数幂求和方法1:扰动法(求两次)

    自然数幂求和方法1:扰动法(求两次) 先来搞一搞等比数列 标号从1开始,\(a_n=a1*q^{n-1}\) \(S_n=\sum_{k=1}^n a_k\) \[\begin{aligned}S_n ...

最新文章

  1. php配置email支持_配置php自带的mail功能
  2. HDU 1430 关系映射 + 打表 .
  3. php文件手机怎么解压,linux 怎么解压文件
  4. [转]粤语发音字典-粤语翻译
  5. Asp.net生成工作流、审批流的解决方案
  6. C++常用强制类型转换
  7. 【免费毕设】PHP论文格式化系统(系统+论文)
  8. oracle function详解,Oracle函数用法详解
  9. 那些好用的firefox扩展插件分享
  10. matlab app designer:夫琅禾费圆孔衍射仿真
  11. 在武汉火车站转车需要出现吗_武汉打造40分钟“高铁中转站” 无需出站可换乘...
  12. kylo添加登录权限module
  13. 中国十大徒步路线,你走过几个?_我是亲民_新浪博客
  14. android联动动画,Android双向列表左右联动效果
  15. 阿里区块链“新路线” |链捕手
  16. xshell对mysql的备份与恢复_XShell5里面登陆了数据库,如何将数据库里面的表或者整个数据库备份导出来(和导入进去)...
  17. Java8-惰性求值
  18. 一个大神的twitter
  19. 两行代码隐藏进程在top中的显示
  20. mintUI Popup的使用

热门文章

  1. docker 修改启动命令_Docker映射详解,没问题了!
  2. python学了真的很有用吗-学习Python真的有必要参加培训吗?老男孩Python学习机构...
  3. php和python-python与php比较
  4. 零基础学python用哪本书好-零基础学python推荐几本python学习的书籍
  5. 只有10万元预算买畅销SUV自动车型您选谁?
  6. (转)【自动语音识别课程】
  7. Keil用C语言定义函数,STC单片机Keil中C语言函数定位的方法
  8. 如何生成草料二维码在手机查看微信效果
  9. window10设置文件夹备注
  10. git中fatal: Authentication failed的问题 git不能clone