Written with StackEdit.

Description

\(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\)。

Output

输出文件有且仅有一行,即可以完成任务的卡片数.\(1≤M≤10^8,1≤N≤M,\)且\(M^N≤10^16.\)

Sample Input

2 4

Sample Output

12

Solution

  • 显然,根据裴蜀定理,满足\(gcd(a_1,a_2,a_3,......a_n,M)=1\)的即为一组解.我们要对其进行计数.
  • 考虑用所有的方案\(M^N\)减去\(gcd\)不为\(1\)的数.
  • 因为最后一个数为\(M\),所以\(gcd\)一定是\(M\)的约数.
  • 将\(M\)分解质因数后,二进制枚举质因数的组合情况.
  • 若当前组合出来的数是\(prod\),那么是\(prod\)倍数的有\(\frac{p}{prod}\)个.
  • 那么这样的方案数为\((\frac{p}{prod})^N.\)
  • 由于会产生重复计数,所以需要容斥处理.奇数个质因子\(+\),偶数个\(-\).

这样看来,\(M^N\)也是一种特殊情况,\(prod=1\),个数为\(0\),所以用加.

#include<bits/stdc++.h>
using namespace std;
typedef long long LoveLive;
inline int read()
{
int out=0,fh=1;
char jp=getchar();
while ((jp>'9'||jp<'0')&&jp!='-')
jp=getchar();
if (jp=='-')
{
fh=-1;
jp=getchar();
}
while (jp>='0'&&jp<='9')
{
out=out*10+jp-'0';
jp=getchar();
}
return out*fh;
}
int n,m;
LoveLive fpow(LoveLive a,LoveLive b)
{
LoveLive res=1;
while(b)
{
if(b&1)
res*=a;
a*=a;
b>>=1;
}
return res;
}
LoveLive factor[50];
int main()
{
n=read(),m=read();
LoveLive ans=fpow(m,n);
int p=m,siz=0;
for(int i=2;i*i<=p;++i)
if(p%i==0)
{
factor[++siz]=i;
while(p%i==0)
p/=i;
}
if(p>1)
factor[++siz]=p;
LoveLive lim=(1<<siz)-1;//质因数的组合方式,二进制枚举
for(LoveLive i=1;i<=lim;++i)
{
LoveLive prod=1,cnt=0;//乘积与这种方案的质因数个数
for(int j=1;j<=siz;++j)
if((i>>(j-1))&1)
{
prod*=factor[j];
++cnt;
}
if(cnt&1)
ans-=fpow(m/prod,n);
else
ans+=fpow(m/prod,n);
}
printf("%lld\n",ans);
return 0;
}

bzoj 1220 跳蚤的更多相关文章

  1. bzoj 4310: 跳蚤

    Description 很久很久以前,森林里住着一群跳蚤.一天,跳蚤国王得到了一个神秘的字符串,它想进行研究. 首先,他会把串分成不超过 k 个子串,然后对于每个子串 S,他会从S的所有子串中选择字典 ...

  2. ●BZOJ 4310 跳蚤

    ●赘述题目 给出一个字符串,要求分成k个子串,然后求出每个子串的字典序最大的子串(我称它为子子串),要使这k个子子串中的字典序最大的那个串(即魔力串)最小.输出该魔力串. (本题个人感觉很好,比较综合 ...

  3. bzoj 4310 跳蚤——后缀数组+二分答案+贪心

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4310 答案有单调性? 二分出来一个子串,判断的时候需要满足那些字典序比它大的子串都不出现! ...

  4. bzoj 4310 跳蚤 二分答案+后缀数组/后缀树

    题目大意 给定\(k\)和长度\(\le10^5\)的串S 把串分成不超过\(k\)个子串,然后对于每个子串\(s\),他会从\(s\)的所有子串中选择字典序最大的那一个,并在选出来的\(k\)个子串 ...

  5. bzoj 4310 跳蚤 —— 后缀数组+二分答案+贪心

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4310 二分答案——在本质不同的子串中二分答案! 如果二分到的子串位置是 st,考虑何时必须分 ...

  6. bzoj 4310: 跳蚤【后缀数组+st表+二分+贪心】

    先求一下SA 本质不同的子串个数是\( \sum n-sa[i]+1-he[i] \),按字典序二分子串,判断的时候贪心,也就是从后往前扫字符串,如果当前子串串字典序大于二分的mid子串就切一下,然后 ...

  7. 后缀数组 hash求LCP BZOJ 4310: 跳蚤

    后缀数组的题博客里没放进去过..所以挖了一题写写 充实下博客 顺便留作板子.. 一个字符串S中 内容不同的子串 有 sigma{n-sa[i]+1-h[i]}   (噢 这里的h[]就是大家熟知的he ...

  8. 跳蚤 BZOJ 4310

    跳蚤 [问题描述] 很久很久以前,森林里住着一群跳蚤.一天,跳蚤国王得到了一个神秘的字符串,它想进行研究. 首先,他会把串分成不超过 k 个子串,然后对于每个子串 S,他会从S的所有子串中选择字典序最 ...

  9. bzoj千题计划157:bzoj1220:[HNOI2002]跳蚤

    扩展欧几里得:ax+by=gcd(a,b) 一定有解 能跳到左边一格,即ax+by=-1 若a,b的gcd=1,则一定有解 所以问题转化为 求n个不大于m的数,他们与m的gcd=1 的方案数 容斥原理 ...

随机推荐

  1. NAT配置与管理

    为解决IPv4地址日益枯竭,出现NAT(Network Address Translation,网络地址转换)技术.NAT可以将来自一个网络的IP数据报报头中的IP地址(可以是源IP地址或目的IP地址 ...

  2. HDU 5703

    题意:给你一个数n,问将n分为正整数和的方案数.如n=3共四种,1 1 1 , 1 2 , 2 1 ,3 . 思路:隔板法,n个1,有n-1个空位,每个空位可以选择是否插入隔板,插入k(0<=k ...

  3. iOS基于XMPP实现即时通讯之一、环境的搭建

    移动端访问不佳,请访问我的个人博客 使用XMPP已经有一段时间了,但是一直都没深入研究过,只是使用SDK做一些简单的操作,看了许多大神的博客,自己总结一下,准备写一系列关于XMPP的使用博客,以便于自 ...

  4. spring security采用基于简单加密 token 的方法实现的remember me功能

    记住我功能,相信大家在一些网站已经用过,一些安全要求不高的都可以使用这个功能,方便快捷. spring security针对该功能有两种实现方式,一种是简单的使用加密来保证基于 cookie 的 to ...

  5. 【bzoj3170】[Tjoi2013]松鼠聚会(数学题)

    题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=3170 这道题要在n个点中求一个点使其他点到该点的切比雪夫距离最小. 有个结论:$ (x ...

  6. Mac下编译tesseract报错 DotProductAVX can't be used on Android

    因为我的mac是64位的,所以用32位编译,执行的时候肯定会出错的. 所以应该在 arch/simddetect.cpp中把这句# define X86_BUILD 1 注释掉,就可以了. 参考 ht ...

  7. Android -- 工程架构,电话拨号器, 点击事件的4中写法

    (该系列整理自张泽华android视频教程) 1. android工程 各个文件夹的作用 src/  java原代码存放目录 gen/ 自动生成目录 gen 目录中存放所有由Android开发工具自动 ...

  8. Java中的条件运算符

    条件运算符( ? : )也称为 “三元运算符”. 语法形式:布尔表达式 ? 表达式1 :表达式2 运算过程:如果布尔表达式的值为 true ,则返回 表达式1 的值,否则返回 表达式2 的值 例如: ...

  9. 配置mybatis-config.xml出现过很诡异的现象

    1 首先得保证包的导入正确 2 然后如果把mybatis-config.xml放在src的某个文件夹下,最后能够build path 3 之后一直报 Archive for required libr ...

  10. InflateException:Bin file line #19:Error inflating class MyTextView

    InflateException:Bin file line #19:Error inflating class MyTextView 一.错误简介 为了实现TextView的跑马灯效果,我自己写了一 ...