POJ1091 简单的欧几里得+简单的容斥

MDK5 Debug调试方法总结 阅读详情

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

这个东西第一眼看真的是一脸懵逼….
先想到既然可左可右,呢么最后的结果必然是正负一
也就是存在xi使得∑ai*xi=1;
这样看就比较简单了…
虽然我对这个什么鬼的欧几里得了解的不多..
但是知道一个结论就是必然存在两个数a,b使得ac+bd=gcd(b,d);
(怎么证?啊哈哈哈哈哈哈这种东西谁会证明啊哈哈哈哈哈哈哈根本不会证啊哈哈哈哈哈哈哈哈哈…..反证法大概可以?有空试试….)
知道这个结论了以后就可以发现只要让gcd(b,d)=1即可
那么就可以用m^n减掉gcd不是1的可能就行了….
简单的想一下如何gcd不是1比较好算…
m是确定的…想要让他们互质….就不要让gcd为m的质因数的有限倍就行
然后就挨个算算..
开始容斥…

#include<iostream>
#include<cmath>
#include<memory.h>
#include<algorithm>
using namespace std;
long long yinshu[50000];
long long he[50000] = { 0 };
long long geshu[50000];
long long n, m;
int u = 0;
long long quickpower(long long a, long long b)
{
    long long res = 1;
    while (b)
    {
        if (b & 1) res *= a;
        a = a*a;
        b >>= 1;
    }
    return res;
}
void dfs(long long zuobiao,long long cengshu,long long ss)
{
    if (cengshu > u)return;
    he[cengshu] += quickpower((long long)(m / (yinshu[zuobiao] * ss)), n);
    for (long long b = zuobiao + 1;b <= u;b++)dfs(b, cengshu + 1,ss*yinshu[zuobiao]);
}
int main()
{
    while (cin >> n >> m)
    {
        memset(yinshu, 0, sizeof(yinshu));
        memset(he, 0, sizeof(he));
        memset(geshu, 0, sizeof(geshu));
        u = 0;
        long long i = m;
        for (int a = 2;a * a <= i;a++)
        {
            if (i%a==0)
            {
                yinshu[++u] = a;
                while (i%a==0)i /= a;
            }
        }
        if (i > 1)yinshu[++u] = i;
        //for (int a = 1;a <= u;a++)geshu[a] = quickpower((long long)(m / yinshu[a]), n);
        for (int a = 1;a <= u;a++)dfs(a, 1,1);
        for (int a = 1;a <= u;a++)if (a % 2)he[a] = -he[a];
        long long sum = quickpower(m, n);
        for (int a = 1;a <= u;a++)sum += he[a];
        cout << sum << endl;
    }
    return 0;
}
Unity开发抖音小游戏存储的几种方法分析 前段时间写小游戏为了省事一直就没有研究抖音小游戏的存储方案,一直使用的是unity中的PlayerPrefs去做的存储,但是后来发现官方会一直提醒让使用抖音sdk中的新文件存储系统,从而降低内存占用。 阅读详情

相关推荐

图形学常见概念小结

前言:本文记录《unity shader入门精要》和openGL相关学习过程中一些学习要点; 文章目录PBR流程渲染管线细分着色器的底层实现,应用原理常见的色调映射算法openGl和Direct X的区别PBR流程和URP渲染管线Camera loop(剔除)MVP矩阵变换光线追踪前向渲染和延迟渲染shader和材质的区别bloom原理后处理的理解高斯模糊实现原理图像处理中的边缘检测算子 PBR流程 小结:一套基于自然界微平面理论、能量守恒、菲涅尔反射、线性空间等的科学理论所实现的基于物理的渲染系统,包含一

小谁的博客 1163

poj 1091 (容斥原理)

poj 1091 (容斥原理) 题意: 给出了n和m,要求出满足最大公约数(x1,x2,...,xn,m)=1的x1,...,xn的组数sum,其中必须满足0 限制: n 思路: 容斥原理 容斥有两种做法 枚举最大公约数(x1,x2,...,xn,m)包含的质因子来容斥 /*poj 1091 题意: 给出了n和m,要求出满足最大公约数(x1,x2,...,xn,m)=1的x1,.

whai的专栏 1003

从零开始:DJI-F450无人机硬件组装全流程解析

本文详细解析了DJI-F450无人机的硬件组装全流程,从开箱清点到焊接、机械组装、飞控系统搭建、电路整合及调试试飞。重点介绍了电调焊接、机臂安装、飞控校准等关键步骤的实用技巧和常见问题解决方案,帮助无人机爱好者从零开始完成专业级组装。

weixin_29210759的博客 622

【POJ】1091 跳蚤

题意:有n张卡片,每张上的值可以相同,每张上的值不超过m,第n+1张为m。设k[i]为任意整数,a[i]为第i张卡片的值,那么问∑k[i]*a[i]=1的a[i]有多少种(0<=i<=n)。 有式子可得n+1个数线性无关,即最大公约数必然等于1。 总数是m^n,只要求得最大公约数不等于1的种数,就能得到答案。 先对m分解素因子,例如12,有2,3。 是2的倍数的有6个:2 4 ...

weixin_30951231的博客 146

Ubuntu22.04下RTX2080显卡驱动、CUDA、cuDNN保姆级避坑安装指南(实测有效)

本文提供Ubuntu22.04下RTX2080显卡驱动、CUDA和cuDNN的详细安装指南,涵盖前期准备、驱动安装、CUDA版本选择、cuDNN配置及常见问题解决。通过实测有效的步骤和优化建议,帮助用户快速搭建稳定的深度学习环境,避免常见陷阱。

weixin_42540248的博客 285

Ubuntu开发环境配置——持续更新

本文简要介绍了Ubuntu下的开发环境配置流程和问题分析与解决,更多内容持续更新中。

m0_53365889的博客 2225

poj 1091 (容斥原理)

#include <iostream> #include <cstdio> #include <iomanip> #include <string> #include <cstdlib> #include <cstring> #include <queue> #include <set> #includ...

Fawkess的博客 289

使用电荷放大器处理压电加速度计输出

电阻器 R p模拟传感器的绝缘电阻,为产生的电荷创建泄漏路径。在此图中,顶部波形显示传感器产生的电荷,而底部波形显示电荷放大器的输出。这需要具有大输入阻抗的放大级,以防止产生的电荷通过与传感元件并联的放大器的输入阻抗泄漏。换句话说,电荷放大器补偿传感器产生的电荷 q p ,反馈电容器 C F中具有相反极性的等量电荷。因此,任何与传感器并联的绝缘电阻,如电缆的绝缘电阻或传感器的漏电电阻Rp,都不能流过电流。漂移是指电荷放大器输出在一段时间内发生的变化,而不是由被测物理参数的变化(我们讨论的加速度)引起的。

weixin_45260069的博客 3905

*&!跳蚤--难

做了好几天的ACM题,今天发现了一个非常难的——跳蚤。做了很长时间了还是没出来%>_DescriptionZ城市居住着很多只跳蚤。在Z城市周六生活频道有一个娱乐节目。一只跳蚤将被请上一个高空钢丝的正中央。钢丝很长,可以看作是无限长。节目主持人会给该跳蚤发一张卡片。卡片上写有N+1个自然数。其中最后一个是M,而前N个数都不超过M,卡片上允许有相同的数字。跳蚤每次可以从卡片上任意选择一个自然数S,

yinxusen的专栏 1019

c#视觉应用开发中如何使用Emgu CV在C#中进行图像处理?

Emgu CV 是 OpenCV 的 .NET 包装器,可以让开发者在 .NET 语言(如 C#)中使用 OpenCV 的功能进行图像处理。在进行图像处理时,Emgu CV 提供了丰富的 API 可以使用。PictureBoxImageBox下面是一个详细的示例,演示如何使用 Emgu CV 在 C# 中进行基本的图像处理,包括加载图像、转换为灰度图像、进行边缘检测,然后显示结果。byte在这个示例中,我们使用了三个PictureBox控件来显示原始图像、灰度图像和边缘检测后的图像。

zhangzhechun的专栏 670

SKUA-GOCAD入门教程-第七节 点的创建与编辑3

本文介绍了四种从井数据创建点集的方法

江洋大葱的博客 963

POJ1091 跳蚤 素因子分解+容斥原理

题目链接:http://poj.org/problem?id=1091 分析:我们假设卡片上的标号分别是a1,a2,...,an,M,跳蚤跳对应标号的卡片的次数分别为x1,x2,...,xn,xn+1,那么要满足已知条件只需满足方程a1*x1+a2*x2+...+an*xn+M*xn+1=1有解,即gcd(a1,a2,...,an,m)=1,接下来对M进行质因子分解,然后排除公共因子非1

AC_Gibson的专栏 2512

webrtc+uniapp(h5和app)实现在线聊天功能 uniapp+网页+服务端源码

uniapp端代码 服务端代码 public/index.html

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 754

【poj1091】 跳蚤

http://poj.org/problem?id=1091(题目链接) 题意   给出一张卡片,上面有n+1个数,其中最大的数为m,每次可以向前或者向后走卡片上面的步数。问有多少种方案选出n个数组成一张卡片,使得存在一种走的方案经过若干步后可以达到与起点距离为1的位置上。 Solution   今天考试题,又是一道大原题。。。   我们假设卡片上的数分别为:${a_1,a_2,a_3...

weixin_30639719的博客 87

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

不定方程:poj 2142+poj 1091(数论+容斥)

二元一次不定方程ax+by=d与同余方程ax=d(mod b)等价,求解线性同余方程可参考链接:http://blog.youkuaiyun.com/u012717411/article/details/42869291 poj 2142 The Balance 题目链接:http://poj.org/problem?id=2142 解题思路:扩展欧几里得很容易得到通解x=x0+b0*t,y=y0-

Hacker_vision 686

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

POJ1091跳蚤(容斥 + 唯一分解 + 快速幂)

题意:规定每次跳的单位 a1, a2, a3 …… , an, M,次数可以为b1, b2, b3 …… bn, bn + 1, 正好表示往左,负号表示往右, 求能否调到左边一位,即 a1* b1+ a2 * b2 + a3 * b3 + …… + m * (bn + 1) = 1; 根据欧几里得,则a1, a2 a3 …… an, m 最大公约数为1,m已知且a1, a2, ...

apk6909的博客 131

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

POJ-1091 扩展欧几里得+容斥原理

Z城市居住着很多只跳蚤。在Z城市周六生活频道有一个娱乐节目。一只跳蚤将被请上一个高空钢丝的正中央。钢丝很长,可以看作是无限长。节目主持人会给该跳蚤发一张卡片。卡片上写有N+1个自然数。其中最后一个是M,而前N个数都不超过M,卡片上允许有相同的数字。跳蚤每次可以从卡片上任意选择一个自然数S,然后向左,或向右跳S个单位长度。而他最终的任务是跳到距离他左边一个单位长度的地方,并捡起位于那里的礼物。 ...

weixin_41934068的博客 169

poj 1091 跳蚤 扩展欧几里得性质+容斥原理

原问题可以转换为求 x(1)*a(1)+x(2)*a(2)+....x(n+1)*a(n+1)=1 的x(i)的所有组合 【其中x(n+1)=M】 若gcd (x1,x2,x3....M)=1,则我们知道此式一定有解,即我们要求一组x,使得它们 和M的最大公约数为1,从反面考虑,我们可用总数减去最大公约数不为1的。 即x(1~n)与M存在公因子,至此容斥的思想就出现了。 解:求出M的所有

832

poj1091跳蚤---------容斥

跳蚤 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 6454   Accepted: 1805 Description Z城市居住着很多只跳蚤。在Z城市周六生活频道有一个娱乐节目。一只跳蚤将被请上一个高空钢丝的正中央。钢丝很长,可以看作是无限长。节目主持人会给该跳蚤发

Shirley 4080

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

Description Z城市居住着很多只跳蚤。在Z城市周六生活频道有一个娱乐节目。一只跳蚤将被请上一个高空钢丝的正中央。钢丝很长,可以看作是无限长。节目主持人会给该跳蚤发一张卡片。卡片上写有N+1个自然数。其中最后一个是M,而前N个数都不超过M,卡片上允许有相同的数字。跳蚤每次可以从卡片上任意选择一个自然数S,然后向左,或向右跳S个单位长度。而他最终的任务是跳到距离他左边一个单位长度的地方,并...

超逸の学习技术博客 767

poj 1091-跳蚤(数论+容斥)

题目链接 题意: 可转化为已知N+1个数,x1, x2, .. xn, m;使得gcd(x1, x2, ..., xn) = 1的解的个数(xi 思路:m^n为所有不同序列个数,然后减去公因数>1且为m的素因子的解数,通过容斥原理思想,答案为 ans=m^n-(奇数个m的素因子相乘作为公因子的n元组)+(偶数个m的素因子相乘作为公因子的n元组)。 公因数为d的n元组,每个位置上有

AC之路 571

POj-1091 跳蚤

原题链接:http://poj.org/problem?id=1091 题目大意:给你两个数n和m;总共有m^n张卡片,每张卡片上有n+1个数字,然后根据卡片上的数字可以向左跳也可以向右跳,每个数字跳的次数任意,直到跳达刚开始左边一个单位的地方 解题思路:把卡片上的数字用x1,x2,x3…xn,m表示,跳的次数可以用a1,a2,a3…an+1表示,于是可以得到: a1x1+a2x2+…+anxn+...

。。。的博客 247

poj 1091 跳蚤(不定方程+容斥)

跳蚤 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 8731   Accepted: 2605 Description Z城市居住着很多只跳蚤。在Z城市周六生活频道有一个娱乐节目。一只跳蚤将被请上一个高空钢丝的正中央。钢丝很长,可以看作是无限长。节目主持人会给该跳

youngkl博客 874

POJ 1091 跳蚤(分解质因数 + 容斥 + 大数)

POJ 1091 跳蚤(分解质因数 + 容斥 + 大数)

Tc的专栏 1452

POJ 1091 - 跳蚤 (容斥)

题目链接: http://poj.org/problem?id=1091题目大意: 给定N,M,有N+1个数字,最后一个必定为M,前面的数字小于等于M,跳蚤可以选择一个数字向左跳该长度,也可以向右,多次选择之后求跳蚤可以跳至左边一单位距离的位置的所有数字组合种数分析: 顺序考虑很难想,不妨逆向思考,什么情况下跳蚤问题无解,这种问题一般很多地方都有涉及,比如换零钱,凑整之类,总之是在gcd(a1

SD_Stjean的博客 450

跳蚤(容斥定理)

Z城市居住着很多只跳蚤。在Z城市周六生活频道有一个娱乐节目。一只跳蚤将被请上一个高空钢丝的正中央。钢丝很长,可以看作是无限长。节目主持人会给该跳蚤发一张卡片。卡片上写有N+1个自然数。其中最后一个是M,而前N个数都不超过M,卡片上允许有相同的数字。跳蚤每次可以从卡片上任意选择一个自然数S,然后向左,或向右跳S个单位长度。而他最终的任务是跳到距离他左边一个单位长度的地方,并捡起位于那里的礼物。 比如...

booty 886
上一篇: HDU2204 第一道...超级水的容斥
下一篇: HDU1796 简单容斥
NineFailure
博客等级 码龄11年 22粉丝 317原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值