题目传送门

跳蚤

题目描述

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$张不同的卡片。现在的问题是,在这所有的卡片中,有多少张可以完成任务。

输入输出格式

输入格式:

输入文件有且仅有一行,包括用空格分开的两个整数N和M。

输出格式:

输出文件有且仅有一行,即可以完成任务的卡片数。

$1\leq N\leq M\leq 10^8$且$M^N\leq10^{16}$

输入输出样例

输入样例#1:

2 4
输出样例#1:

12

说明

这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)


  分析:

  大力推结论的数学题。

  大部分人好像都是用莫比乌斯函数做的,这里博主用的是大力推结论+容斥原理。

  推这道题的过程是真的有点意思,一步一步来:

  首先,我们要知道能跳到目标位置的情况是什么。这个用裴蜀定理可以推出,向某一方向可以跳的距离一定是使用了的数字的最大公约数的倍数。那么我们也就知道了,能跳到左边一个单位的情况就是$n+1$个数字中至少有一对互质的数。

  但是我们直接求这种情况似乎太难了,不如反过来,用所有情况数减去不能跳到的情况。那么我们就要想,怎么去计算不能跳到的情况。

  显然,选的数的最大公约数一定要大于$1$。而且题目又限定了第$n+1$个数字是$m$,那么我们就把所有的$m$的质因数拿来操作。

  怎么操作呢?先选取一个质因数,然后把所有$\leq m$的包含这个质因数的数的个数求出,然后用总情况数减去这些数构成的卡片的情况数。

  这样貌似就已经可以了,但是博主交上去,$20pts$。。。

  为什么?因为会减去重复的情况。这里举个例:$n=2,m=12$,$m$的质因数有$2,3$。其中取$2$操作时有这种情况:$6,6,12$,而取$3$操作时也有这种情况!

  所以这里需要用容斥原理把重复情况加回来。

  Code:

//It is made by HolseLee on 19th Oct 2018
//Luogu.org P2231
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std; typedef long long ll;
const int N=1e6+;
ll n,m,ans,tot,q[N],g[N],top,lim,cnt; void ready(ll ka)
{
for(ll i=; i*i<=ka; ++i) {
if( ka%i== ) {
q[++top]=i;
while( ka%i== ) ka/=i;
}
}
if( ka> ) q[++top]=ka;
} inline ll power(ll x,ll y)
{
ll ret=;
while( y ) {
if( y& ) ret*=x;
y>>=; x*=x;
}
return ret;
} void dfs(ll now,ll hl,ll choose)
{
if( now>top+ ) return;
if( choose==lim ) {
g[++cnt]=hl; return;
}
dfs(now+,hl*q[now],choose+);
dfs(now+,hl,choose);
} int main()
{
cin>>n>>m;
ready(m);
ans=power(m,n);
for(ll i=; i<=top; ++i) {
lim=i; cnt=;
dfs(,,);
if( i& )
for(ll j=; j<=cnt; ++j) ans-=power(m/g[j],n);
else
for(ll j=; j<=cnt; ++j) ans+=power(m/g[j],n);
}
cout<<ans<<'\n';
return ;
}

洛谷P2231 [HNOI2002]跳蚤 [数论,容斥原理]的更多相关文章

  1. 洛谷 P2231 [HNOI2002]跳蚤

    https://www.luogu.org/problemnew/show/P2231 题意相当于:有n个位置a[1..n],每个位置可以填[1,m]中任一个整数,问共有多少种填法满足gcd(a[1] ...

  2. 【模板】矩阵快速幂 洛谷P2233 [HNOI2002]公交车路线

    P2233 [HNOI2002]公交车路线 题目背景 在长沙城新建的环城公路上一共有8个公交站,分别为A.B.C.D.E.F.G.H.公共汽车只能够在相邻的两个公交站之间运行,因此你从某一个公交站到另 ...

  3. 洛谷 P1763 状态压缩dp+容斥原理

    (题目来自洛谷oj) 一天,maze决定对自己的一块n*m的土地进行修建.他希望这块土地共n*m个格子的高度分别是1,2,3,...,n*m-1,n*m.maze又希望能将这一些格子中的某一些拿来建蓄 ...

  4. BZOJ1220 HNOI2002 跳蚤 【容斥原理+高精度】*

    BZOJ1220 HNOI2002 跳蚤 Description Z城市居住着很多只跳蚤.在Z城市周六生活频道有一个娱乐节目.一只跳蚤将被请上一个高空钢丝的正中央.钢丝很长,可以看作是无限长.节目主持 ...

  5. 洛谷P4778 Counting swaps 数论

    正解:数论 解题报告: 传送门! 首先考虑最终的状态是固定的,所以可以知道初始状态的每个数要去哪个地方,就可以考虑给每个数$a$连一条边,指向一个数$b$,表示$a$最后要移至$b$所在的位置 显然每 ...

  6. 洛谷P4562 [JXOI2018]游戏 数论

    正解:数论 解题报告: 传送门! 首先考虑怎么样的数可能出现在t(i)那个位置上?显然是[l,r]中所有无法被表示出来的数(就约数不在[l,r]内的数嘛QwQ 所以可以先把这些数筛出来 具体怎么筛的话 ...

  7. P2231 [HNOI2002]跳蚤

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

  8. 洛谷 P2233 [HNOI2002]公交车路线 解题报告

    P2233 [HNOI2002]公交车路线 题目背景 在长沙城新建的环城公路上一共有8个公交站,分别为A.B.C.D.E.F.G.H.公共汽车只能够在相邻的两个公交站之间运行,因此你从某一个公交站到另 ...

  9. 洛谷——P2236 [HNOI2002]彩票

    P2236 [HNOI2002]彩票 给你$m$个数,从中挑$n$个数,使得这$n$个数的倒数之和恰好等于$\frac{x}{y}$ 常见的剪纸思路: 如果当前的倒数和加上最小可能的倒数和$>$ ...

随机推荐

  1. hadoop之安全篇

    ---------------持续更新中------------------- hadoop集群安全架构 如下图所示: --------------------------未完待续---------- ...

  2. Flex布局(伸缩盒布局)

    Flexible Box是什么?Flexible意为可伸缩的,Box意为盒子,可以理解为一种新式的盒模型——伸缩盒模型.由CSS3规范提出,这是在原有的大家非常熟悉的block, inline-blo ...

  3. Isomorphic JavaScript: The Future of Web Apps(译)

                                                                                                 Isomorp ...

  4. Codeforces 765F Souvenirs

    time limit per test 3 seconds memory limit per test 512 megabytes input standard input output standa ...

  5. 2017ACM暑期多校联合训练 - Team 8 1006 HDU 6138 Fleet of the Eternal Throne (字符串处理 AC自动机)

    题目链接 Problem Description The Eternal Fleet was built many centuries ago before the time of Valkorion ...

  6. NYOJ 305 表达式求值 (字符串处理)

    题目链接 描述 Dr.Kong设计的机器人卡多掌握了加减法运算以后,最近又学会了一些简单的函数求值,比如,它知道函数min(20,23)的值是20 ,add(10,98) 的值是108等等.经过训练, ...

  7. html5手机Web单页应用实践--起点移动阅读

    一开始以hybrid形式做了一个android的小说阅读客户端,叫4G阅读.而后由于业务需求,要迅速实现纯手机html5 版的,所以就直接在原先客户端内内嵌的网页进行改版,快速实现以后在优化的过程中发 ...

  8. Hbuilder连接第3方模拟器(夜神)

    http://www.bcty365.com/content-146-5148-1.html

  9. 第三讲:ifconfig:最熟悉又陌生的命令行

    你知道怎么查看IP地址吗? 当面试听到这个问题的时候,面试者常常会觉得走错了房间.我面试的是技术岗位啊,怎么问这么简单的问题? 的确,即便没有专业学过计算机的人,只要倒腾过电脑,重装过系统,大多也会知 ...

  10. STL hashtable阅读记录

    unordered_map,unordered_set等相关内容总结: unordered_map和unordered_set是在开发过程中常见的stl数据结构.其本质是hashtable.在SGI_ ...