• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >编程问答 > 错排序列第N项模M=?

错排序列第N项模M=?

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-07

佚名通过本文主要向大家介绍了等差数列前n项和ppt,等比数列前n项和公式,等差数列前n项和公式,数列an的前n项和为sn,等差数列的前n项和等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题:错排序列第N项模M=?
描述:

错排递推式:f(n)=(n-1)*(f(n-1)+f(n-2)) f(1)=0,f(2)=1

求f(n)%m,m<=1e5,n<=1e9,n,m为整数。

网上有人说循环节长度为2*m,起始位置是f(1),所以直接求f(n%(2*m))。对吗?为什么。


解决方案1:

循环节不超过m^2。(因为f[n]由f[n-1],f[n-2]唯一决定,在mod m下f[n-1]和f[n-2]最多有m^2种组合。)

一边开哈希表一这算递推,算到出现循环为止。注意循环节可能到中间才出现(想想循环小数)。

解决方案2:

~~~ #UPDATE: 又仔细想了下 最后推导似乎有问题 略囧 所以仅供参考思路了 ~~~

----

你给出的这个“错排递推公式”,实际上有一个“直接”的计算公式:

f(n) =  n! * ((-1)^0/0! + (-1)^1 / 1! + (-1)^2 / 2! + ... + (-1)^n*1/n!)

已知

x = aX + b
y = cY + d
(x + y) % m = (aX + b + cY + d) % m = (b + d) % m = (X % m + Y % m) % m

记

g(n) = f(n) % m

则有

g(2m + n) = ((2m + n)! * (
[1]      -1^0    / 0!    + (-1)^1      / 1!      + ... + (-1)^(m-1)  / (m-1)!
[2]  + (-1)^m    / m!    + (-1)^(m+1)  / (m+1)!  + ... + (-1)^(2m-1) / (2m-1)!
[3]  + (-1)^(2m) / (2m)! + (-1)^(2m+1) / (2m+1)! + ... + (-1)^(2m+n) / (2m+n)!
    )) % m

由于 ((2m + n)! * 任意一个前2m项) % m == 0,所以前两行可以消掉(这个很容易看出来的吧?)

g(2m + n) 
  = ((2m + n)! * (
      (-1)^(2m) / (2m)! + (-1)^(2m+1) / (2m+1)! + ... + (-1)^(2m+n) / (2m+n)!
     )) % m
~~~ 由于 (-1)^2m == 1 ~~~
  = ((2m + n)! * (
      (-1)^0 / (2m)! + (-1)^1 / (2m+1)! + ... + (-1)^n / (2m+n)!
     )) % m
  = ((-1)^0 / n! + (-1)^1 / (n-1)! + ... + (-1)^n / 0!) % m

这里已经很接近你说的结论了,由于n是奇偶的时候会影响这里的正负号,而我前面没有证明 (x - y) % m 的公式,但是由于实际上前2m项减去后n项毫无疑问是正数(中间这些琐碎的证明略掉),所以最终结论就是:

 g(2m + n) == g(n) 


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 错排序列第N项模M=?

相关文章

  • 2017-06-07 使用sbt的eclipse插件配置开发环境碰到的问题
  • 2017-06-07 一个关于TreeMap的clear方法的节点gc问题?
  • 2017-06-07 Scrapy+phantonjs爬去速度过慢?
  • 2017-06-07 windows下php55哪里有Redis28的扩展下载呢?
  • 2017-06-07 七牛开发者文档关于上传凭证,url安全base64得出的数据不同
  • 2017-06-07 (python)使用gunicorn启动flask项目,重复启动问题
  • 2017-06-07 七牛图片下载支持4G网络吗?
  • 2017-06-07 (redis)存储坐标点及其多维度点击数
  • 2017-06-07 服务端无法判读微信公众号发来的纯数字文本?
  • 2017-06-07 在centos下面,nose无法遍历test开头的目录或者文件?

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 为什么raise触发的异常无法被except处理?
    • 七牛Robots的问题
    • php的,上传成功的,但文件不对。
    • go语言用httpFileServer下载文件以后不能再次下载
    • Flask如何解决F5刷新重复提交的问题,谢谢!
    • ubuntu安装python3下的pip失败:E:Couldn'tfindpackage"python3-pip"
    • 七牛问题,如何循环获取私有认证循环图片?
    • laravel(laravel)Lavavel的视图输出
    • 爬墙软件pythonrequests爬虫问题
    • 关于排序的问题

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有