当前位置: 首页 > news >正文

清北学堂模拟day6 花

【问题描述】

商店里出售n种不同品种的花。为了装饰桌面,你打算买m支花回家。你觉得放两支一样的花很难看,因此每种品种的花最多买1支。求总共有几种不同的买花的方案?答案可能很大,输出答案mod p的值。

 

【输入格式】

一行3个整数n,m,p,意义如题所述。

 

【输出格式】

一个整数,表示买花的方案数。

 

【输入输出样例1】

flower.in

flower.out

4 2 5

1

       见选手目录下的flower / flower1.in与flower / flower1.out

 

【输入输出样例1说明】

    用数字1,2,3,4来表示花的种类的话,4种花里买各不相同的2支的方案有(1,2)、(1,3)、(1,4)、(2,3)、(2,4)、(3,4),共6种方案,模5后余数是1。

 

【输入输出样例2】

       见选手目录下的flower / flower2.in与flower / flower2.out

 

【数据范围】

对于30%的数据,n,m≤10

对于50%的数据,n,m≤1000

对于80%的数据,1≤m≤n≤50,000

对于100%的数据,1≤m≤n≤1,000,000,p≤1,000,000,000

/*
鲁卡斯定理的适用条件:p为质数(sth原话:p为任意数我也不会求),因为逆元不能直接算,所以必须要分析组合数性质,这个题其实也可作为取模组合数的模板题
分析组合数的公式,首先确定这个数一定是一个整数,也就是说我们只需要分子分母各自分解质因数,然后把分子中出现在分母中的质因数对应减掉其出现次数就行了,暴力分解会稍微慢一点,我们用nlogn的筛法解决,一个数倍一个质数筛掉,分解成两个因子,然后这两个因子继续分解质因数
两篇文章
①http://blog.csdn.net/acdreamers/article/details/8220787http://blog.csdn.net/acdreamers/article/details/8037918
*/
#include <cstdio>
#include <cmath>

int cnt[1000055],n,m,i,j,r,v[1000011],d[1000011];
long long p,ans;

int main()
{
    freopen("flower.in", "r", stdin);
    freopen("flower.out", "w", stdout);
    scanf("%d%d%I64d", &n, &m, &p);
    for (i=m+1; i<=n; ++i) cnt[i] = 1;
    for (i=1; i<=n-m; ++i) cnt[i] -= 1;

    for (i=2; i<=n; ++i)
    if (!v[i])
    {
        for (j=i+i; j<=n; j+=i)
        {
            v[j] = 1;
            d[j] = i;
        }
    }
    for (i=n; i>=2; --i)
    if (d[i] > 0)
    {
        cnt[d[i]] += cnt[i];
        cnt[i/d[i]] += cnt[i];
        cnt[i] = 0;
    }
    ans = 1;
    for (i=2; i<=n; ++i)
    for (j=1; j<=cnt[i]; ++j) ans = ans*i%p;
    printf("%I64d\n", ans);
    return 0;
}

 

转载于:https://www.cnblogs.com/hyfer/p/5967333.html

相关文章:

  • awk之shell快速修改文件名
  • ajax测试Demo以及json简单的转化
  • 《深入理解JavaScript》—— JSON
  • VCS仿真 Dump Memory
  • 【读书笔记】《编程珠玑》第二章之算法设计的重要性
  • Web:AJAX的网络请求
  • Lambda表达式详解(转载)
  • JMeter 配置元件之计数器Counter
  • signalr-源码
  • iOS开发之内购-AppStore
  • matplotlib —— 添加文本信息(text)
  • linux下压缩包的解压
  • [Java][Liferay] File system in liferay
  • 用for、while、do-while循环输出10句“好好学习,天天向上!”
  • 常见标签的全称
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • angular组件开发
  • CentOS 7 防火墙操作
  • Hexo+码云+git快速搭建免费的静态Blog
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • Python中eval与exec的使用及区别
  • ReactNativeweexDeviceOne对比
  • spring-boot List转Page
  • 关于字符编码你应该知道的事情
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 类orAPI - 收藏集 - 掘金
  • 如何设计一个微型分布式架构?
  • 深入 Nginx 之配置篇
  • 赢得Docker挑战最佳实践
  • #git 撤消对文件的更改
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • #QT(一种朴素的计算器实现方法)
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (6)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—使用Adaboost建模及工作环境下的数据分析整理
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (二)c52学习之旅-简单了解单片机
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (附源码)计算机毕业设计SSM保险客户管理系统
  • (一)80c52学习之旅-起始篇
  • (转)Mysql的优化设置
  • ***利用Ms05002溢出找“肉鸡
  • .desktop 桌面快捷_Linux桌面环境那么多,这几款优秀的任你选
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径
  • .net framework 4.0中如何 输出 form 的name属性。
  • .NET 使用 JustAssembly 比较两个不同版本程序集的 API 变化
  • .NET开源项目介绍及资源推荐:数据持久层 (微软MVP写作)
  • /etc/apt/sources.list 和 /etc/apt/sources.list.d
  • @PreAuthorize注解
  • [Android]How to use FFmpeg to decode Android f...
  • [Angular] 笔记 7:模块
  • [CentOs7]图形界面
  • [Cocoa]iOS 开发者账户,联机调试,发布应用事宜
  • [CSS]浮动
  • [GXYCTF2019]BabySQli1