跳蚤

Time Limit: 1000ms
Memory Limit: 10000KB

This problem will be judged on PKU. Original ID: 1091
64-bit integer IO format: %lld      Java class name: Main

Z城市居住着很多只跳蚤。在Z城市周六生活频道有一个娱乐节目。一只跳蚤将被请上一个高空钢丝的正中央。钢丝很长,可以看作是无限长。节目主持人会给该跳蚤发一张卡片。卡片上写有N+1个自然数。其中最后一个是M,而前N个数都不超过M,卡片上允许有相同的数字。跳蚤每次可以从卡片上任意选择一个自然数S,然后向左,或向右跳S个单位长度。而他最终的任务是跳到距离他左边一个单位长度的地方,并捡起位于那里的礼物。 
比如当N=2,M=18时,持有卡片(10, 15, 18)的跳蚤,就可以完成任务:他可以先向左跳10个单位长度,然后再连向左跳3次,每次15个单位长度,最后再向右连跳3次,每次18个单位长度。而持有卡片(12, 15, 18)的跳蚤,则怎么也不可能跳到距他左边一个单位长度的地方。 
当确定N和M后,显然一共有M^N张不同的卡片。现在的问题是,在这所有的卡片中,有多少张可以完成任务。 

Input

两个整数N和M(N <= 15 , M <= 100000000)。

Output

可以完成任务的卡片数。

Sample Input

2 4

Sample Output

12

Hint

这12张卡片分别是: 
(1, 1, 4), (1, 2, 4), (1, 3, 4), (1, 4, 4), (2, 1, 4), (2, 3, 4), 
(3, 1, 4), (3, 2, 4), (3, 3, 4), (3, 4, 4), (4, 1, 4), (4, 3, 4) 

Source

HNOI 2001
解题:容斥原理,先找出n个与m不互质的,然后减去就是了
有扩展欧几里得的影子

 1 #include <iostream>
 2 using namespace std;
 3 typedef long long LL;
 4 const int maxn = 50;
 5 LL p[maxn],n,m,ret,tot;
 6 LL quickPow(LL base,LL index){
 7     LL ret = 1;
 8     while(index){
 9         if(index&1) ret *= base;
10         index >>= 1;
11         base *= base;
12     }
13     return ret;
14 }
15 void init(LL x){
16     tot = 0;
17     for(int i = 2; i*i <= x; ++i){
18         if(x%i == 0){
19             p[tot++] = i;
20             while(x%i == 0) x /= i;
21         }
22     }
23     if(x > 1) p[tot++] = x;
24 }
25 int main(){
26     ios::sync_with_stdio(false);
27     while(cin>>n>>m){
28         init(m);
29         for(int i = 1; i < (1<<tot); ++i){
30             int cnt = 0;
31             LL tmp = 1;
32             for(int j = 0; j < tot; ++j){
33                 if((i>>j)&1){
34                     cnt++;
35                     tmp *= p[j];
36                 }
37             }
38             if(cnt&1) ret += quickPow(m/tmp,n);
39             else ret -= quickPow(m/tmp,n);
40         }
41         cout<<(quickPow(m,n) - ret)<<endl;
42     }
43     return 0;
44 }

View Code

转载于:https://www.cnblogs.com/crackpotisback/p/4850708.html

POJ 1091 跳蚤相关推荐

  1. POJ 1091 跳蚤 【容斥原理】+模板

    Description Z城市居住着很多只跳蚤.在Z城市周六生活频道有一个娱乐节目.一只跳蚤将被请上一个高空钢丝的正中央.钢丝很长,可以看作是无限长.节目主持人会给该跳蚤发一张卡片.卡片上写有N+1个 ...

  2. POJ - 1091 跳蚤(容斥原理+数论)

    题目链接:点击查看 题目大意:中文题意,不多赘述 题目分析:根据题目的意思,其实只需要让所有数的最大公约数为1就可以满足条件,好像是用到了欧几里得的一些知识,奈何我的数论比较菜,也不会证明,就直接用网 ...

  3. POJ 1091(数论)

    题目大意是给定两个整数n和m,求出长度为n+1满足条件的数列data的个数,数列的要求下: 1)1<=data[i]<=m,for1<=i<=n 2)data[n+1]=m; ...

  4. 信息学竞赛中的数学知识 --- 容斥原理

    C++基础数论-----容斥原理 C++基础数论-----容斥原理_C2020lax的博客-CSDN博客_容斥原理c++ C++数论容斥原理----无关的元素 C++数论容斥原理----无关的元素 - ...

  5. POJ前面的题目算法思路【转】

    1000 A+B Problem 送分题 49% 2005-5-7 1001 Exponentiation 高精度 85% 2005-5-7 1002 487-3279 n/a 90% 2005-5- ...

  6. POJ 超详细分类

    POJ 各题算法 1000    A+B Problem            送分题     49%    2005-5-7 1001    Exponentiation         高精度   ...

  7. [kuangbin]各种各样的题单

    [kuangbin]各种各样的题单 专题1 简单搜索 POJ 1321 POJ 2251 POJ 3278 POJ 3279 POJ 1426 POJ 3126 POJ 3087 POJ 3414 F ...

  8. ACM组合数学题目列表

    基本组合计数 HDU 1028 Ignatius and the Princess III 整数划分 HIT 1402 整数划分问题 多种整数划分 置换群 PKU 2369 求置换的周期 1026 求 ...

  9. 我花了三个小时写了一道题的六千字题解....(POJ 2888 Magic Bracelet)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 前置知识:小学生都能看懂的群论从入门到升天教程 <群论全家桶> 一道简单的题目 Probl ...

最新文章

  1. java怎么制作放置游戏_从零开始实现放置游戏(八)——实现后台管理系统(6)代码重构...
  2. python bashplotlib_Matplotlib 中文用户指南 7.2 Python shell 中使用 Matplotlib
  3. C#代码创建3D模型
  4. Rancher2.0中邮件通知的设置
  5. mysql删除数据不会减少存储占用_Mysql单文件存储删除数据文件容量不会减少的bug与解决方法...
  6. 在matlab中怎么录制音频_怎么录制淘宝页面中的视频?简单方法,轻松搞定
  7. 用Java创建自己的AOP
  8. [Go语言]从Docker源码学习Go——init()方法和identifier首字母大小写区分
  9. 电脑向linux服务器传输文件,windows如何通过ssh工具向linux服务器上传和下载文件?...
  10. Archiva 2.2.3 安装运行的时候出现协议版本错误
  11. 2021抚顺高考成绩查询,2021年抚顺高考成绩排名及成绩公布时间什么时候出来
  12. 《Spring Recipes》第二章笔记:Customizing Bean Initiali...
  13. 电商宝:做最懂电商卖家的财务管理“小秘书”
  14. 一个QQ盗号木马是这样诞生的(C#)
  15. C语言学习笔记《带你学C带你飞》P41-P61
  16. c语言求解一元三次方程(二分法和公式法)
  17. 微信小程序和微信H5有什么区别?
  18. error2448C语言,VS 报错 error C2448: “main”: 函数样式初始值设定项类似函数定义 问题的解决方法...
  19. STM32物联网项目-ADC采集实验板板温度(NTC热敏电阻)
  20. JavaScript高级程序设计(第4版)(红宝书)的学习笔记

热门文章

  1. android手写简单mvp,[webpack]手写一个mvp版本的webpack
  2. 高和父元素的高一致_首次:低温熔盐法合成菊花状三维高熵硼化物纳米花 (华南理工大学褚衍辉课题组最新研究成果)...
  3. python创建子类_Python线程创建子类?
  4. 有一种惨:人还在,数据没了...
  5. 如何选择最优路径完成云原生上云?听这场阿里云特别分享【云原生技术与最佳实践】
  6. 济南电子机械工程学校计算机专业班主任,济南电子机械工程学校庆祝2020年教师节暨表彰大会隆重举行...
  7. python进行linux编程,Python之函数进阶
  8. 导购提成怎么算_only导购工资提成怎么算标准
  9. python牛顿法求立方根_【华为机试】求解立方根(牛顿迭代法)
  10. rapter求n的阶乘流程图_RAPTOR程序设计例题参考答案