题目大意

求 \(b\) (正整数集合)使得 \(\sum_{i=1}^{n+1} a_i \times b_i = 1\)

其中给定 \(b_{n+1}=m\) 且为 \(b\) 中最大值

\(1 \leq n,m \leq 10^{15}\)

解法

其实很简单

很容易想到 \(\gcd(b_1,b_2,...,b_{n+1}) = 1\)

而 \(b_{n+1}=m\) 为最大值

那么我们就可以构造满足 \(\gcd\) 两两互质的数列,则必满足题目要求(裴蜀定理)

于是我们要怎么算?

正难则反

我们算不满足的数列的个数

只要这些数的最大公约数大于 \(1\) 则可

我们把 \(m\) 分解质因数

每个质因子 \(\alpha\),\(m\) 内就有 \(m / \alpha\) 个数是其倍数

全这些数来构造数列,必然不合法,有 \((m / \alpha) ^ n\) 个

但我们会算重,容斥即可

总的方案有 \(m^n\) 个,减去这些不合法的即可

\(Code\)

#include<cstdio>
#include<cmath>
using namespace std;
typedef long long LL; const LL P = 1e9 + 7;
int cnt , ct;
LL n , m , num[30] , tmp[30] , c[30] , ans; void dfs(int x , LL s , int b)
{
if (x > cnt)
{
tmp[++ct] = s , c[ct] = (b & 1 ? -1 : 1);
return;
}
dfs(x + 1 , s * num[x] , b + 1);
dfs(x + 1 , s , b);
} LL fpow(LL x , LL y)
{
LL res = 1;
x %= P;
while (y)
{
if (y & 1) res = res * x % P;
y >>= 1 , x = x * x % P;
}
return res;
} int main()
{
freopen("heal.in" , "r" , stdin);
freopen("heal.out" , "w" , stdout);
scanf("%lld%lld" , &n , &m);
LL o = m;
for(register int i = 2; (LL)i * i <= o; i++)
if (o % i == 0)
{
num[++cnt] = i;
while (o % i == 0) o /= i;
}
if (o > 1) num[++cnt] = o;
dfs(1 , 1 , 0);
for(register int i = 1; i <= ct; i++)
{
o = fpow(m / tmp[i] , n);
ans = ((ans + o * c[i]) % P + P) % P;
}
printf("%lld" , ans);
}

JZOJ 5348. 【NOIP2017提高A组模拟9.5】心灵治愈的更多相关文章

  1. JZOJ 【NOIP2017提高A组模拟9.14】捕老鼠

    JZOJ [NOIP2017提高A组模拟9.14]捕老鼠 题目 Description 为了加快社会主义现代化,建设新农村,农夫约(Farmer Jo)决定给农庄里的仓库灭灭鼠.于是,猫被农夫约派去捕 ...

  2. [JZOJ 100026] [NOIP2017提高A组模拟7.7] 图 解题报告 (倍增)

    题目链接: http://172.16.0.132/senior/#main/show/100026 题目: 有一个$n$个点$n$条边的有向图,每条边为$<i,f(i),w(i)>$,意 ...

  3. 【NOIP2017提高A组模拟9.7】JZOJ 计数题

    [NOIP2017提高A组模拟9.7]JZOJ 计数题 题目 Description Input Output Sample Input 5 2 2 3 4 5 Sample Output 8 6 D ...

  4. JZOJ 100029. 【NOIP2017提高A组模拟7.8】陪审团

    100029. [NOIP2017提高A组模拟7.8]陪审团 Time Limits: 1000 ms  Memory Limits: 131072 KB  Detailed Limits   Got ...

  5. JZOJ 5328. 【NOIP2017提高A组模拟8.22】世界线

    5328. [NOIP2017提高A组模拟8.22]世界线 (File IO): input:worldline.in output:worldline.out Time Limits: 1500 m ...

  6. JZOJ 5329. 【NOIP2017提高A组模拟8.22】时间机器

    5329. [NOIP2017提高A组模拟8.22]时间机器 (File IO): input:machine.in output:machine.out Time Limits: 2000 ms M ...

  7. JZOJ 5307. 【NOIP2017提高A组模拟8.18】偷窃 (Standard IO)

    5307. [NOIP2017提高A组模拟8.18]偷窃 (Standard IO) Time Limits: 1000 ms Memory Limits: 262144 KB Description ...

  8. JZOJ 5286. 【NOIP2017提高A组模拟8.16】花花的森林 (Standard IO)

    5286. [NOIP2017提高A组模拟8.16]花花的森林 (Standard IO) Time Limits: 1000 ms Memory Limits: 131072 KB Descript ...

  9. JZOJ 5305. 【NOIP2017提高A组模拟8.18】C (Standard IO)

    5305. [NOIP2017提高A组模拟8.18]C (Standard IO) Time Limits: 1000 ms Memory Limits: 131072 KB Description ...

  10. 【NOIP2017提高A组模拟9.17】信仰是为了虚无之人

    [NOIP2017提高A组模拟9.17]信仰是为了虚无之人 Description Input Output Sample Input 3 3 0 1 1 7 1 1 6 1 3 2 Sample O ...

随机推荐

  1. 数电第三周周结_by_yc

    主要内容:Modelsim和Quartus的使用坑点 Modelsim: 新建Project:   在每新建一个verilog文件时,均需要添加一project的独立路径,否则不同文件之间会相互影响! ...

  2. 第一章:seaborn图形美学

    一.seaborn模板 1 import numpy as np 2 import matplotlib.pyplot as plt 3 4 def sinplot(flip=1): 5 x = np ...

  3. python2和python3的区别(1)

    1.python2和python3的解释器的默认编码不同 python2解释器的编码默认用的是 ascii python3解释器的编码默认用的 utf-8 2.python2和python3输入的表示 ...

  4. TabControl控件的简单使用-添加tab

    1.首先创建一个MFC对话框框架,在对话框资源上从工具箱中添加上一个Tab Control 控件,根据需要修改一下属性,然后右击控件,为这个控件添加一个变量,将此控件跟一个CTabCtrl类变量绑定在 ...

  5. linux系统部署微服务项目

    **:如果使用阿里云linux服务器 1.设置容器镜像服务 在阿里云平台搜索 "容器镜像服务" 选择"CentOS" 安装/升级Docker客户端 配置镜像加速 ...

  6. ArcObjects SDK开发 016 在ArcMap中使用Toolbox

    1.如何找到ToolBox 通过Geoprocessing菜单上的ArcToolbox菜单项,可以打开ArcToolbox面板. 工具栏上也有一个ArcToolbox的按钮,点击该按钮也可以打开. 通 ...

  7. tomcat下找不到运行的程序文件

    1.重新部署tomcat(删掉原有的tomcat) 2.更改部署路径

  8. Prometheus高可用架构介绍

    Prometheus作为新生代的开源监控系统,慢慢成为了云原生体系的监控事实标准,也证明了其设计得到业界认可.但在多集群,大集群等场景下,Prometheus由于没有分片能力和多集群支持,还有Prom ...

  9. jsvmp_wencai

    网站 aHR0cDovL3d3dy5pd2VuY2FpLmNvbS91bmlmaWVkd2FwL2hvbWUvaW5kZXg= 直接搜索关键词 下面是要抓取的数据 逆向位置(一个即可) hook到he ...

  10. snprintf拼接字符串

    例如编辑一个txt文档,不断将字符输入,最终形成一个长句子.可以看成是字符串的不断拼接.snprintf函数具有这个功能. #include<stdio.h> void main(void ...