POJ - 1091 跳蚤(容斥原理+数论)
题目链接:点击查看
题目大意:中文题意,不多赘述
题目分析:根据题目的意思,其实只需要让所有数的最大公约数为1就可以满足条件,好像是用到了欧几里得的一些知识,奈何我的数论比较菜,也不会证明,就直接用网上大牛们的结论吧,题目说了第n+1个数已经帮我们选好了,为m,所以我们只需要找出有多少种情况选择n个与m互质的数就是题目所求了,不过正难则反,我们可以求有多少组数与m是有不互质的,用总数减去当前答案数就是最后要求的最终答案了,这样问题就转换为了求1~m中有多少个数与n互质,不过这个题目稍微有一点点的变化就是并不是直接询问的个数,而是排列组合数,给出的n就是起到了这个用处,因为对于1~m中的任意一个数x,其都可以在n个位置出现,所以总的方案数为m^n,而每次需要操作的答案也是需要加一个n次幂就好了,举个很简单的例子想一下,比如现在我们需要求与m的公因子p不互斥的数有num个,求出这个答案后,这num个数可以互相搭配,在这个题目做出的贡献就是num^n了
一开始看到m是1e8,三次方就爆掉longlong了,但好像是由于数据比较水,用longlong就能水过,所以也不用大费周折的去开高精度来做啦
代码:
#include<iostream>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<climits>
#include<cmath>
#include<cctype>
#include<stack>
#include<queue>
#include<list>
#include<vector>
#include<set>
#include<map>
#include<sstream>
using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=210;LL q_pow(LL a,LL b)
{LL ans=1;while(b){if(b&1)ans*=a;a*=a;b>>=1;}return ans;
}vector<int>fact;LL solve(LL n,LL m)
{fact.clear();LL temp=m;for(LL i=2;i*i<=temp;i++){if(temp%i==0){fact.push_back(i);while(temp%i==0)temp/=i;}}if(temp>1)fact.push_back(temp);LL ans=0;for(int i=1;i<(1<<fact.size());i++){LL cnt=0;LL mul=1;for(int j=0;j<fact.size();j++){if(i&(1<<j)){cnt++;mul*=fact[j];}}if(cnt&1)//奇加偶减 ans+=q_pow(m/mul,n);elseans-=q_pow(m/mul,n);}return q_pow(m,n)-ans;
}int main()
{
// freopen("input.txt","r",stdin);
// ios::sync_with_stdio(false);LL n,m;while(scanf("%lld%lld",&n,&m)!=EOF)printf("%lld\n",solve(n,m));return 0;
}
POJ - 1091 跳蚤(容斥原理+数论)相关推荐
- POJ 1091 跳蚤 【容斥原理】+模板
Description Z城市居住着很多只跳蚤.在Z城市周六生活频道有一个娱乐节目.一只跳蚤将被请上一个高空钢丝的正中央.钢丝很长,可以看作是无限长.节目主持人会给该跳蚤发一张卡片.卡片上写有N+1个 ...
- POJ 1091 跳蚤
跳蚤 Time Limit: 1000ms Memory Limit: 10000KB This problem will be judged on PKU. Original ID: 1091 64 ...
- POJ 1091(数论)
题目大意是给定两个整数n和m,求出长度为n+1满足条件的数列data的个数,数列的要求下: 1)1<=data[i]<=m,for1<=i<=n 2)data[n+1]=m; ...
- Bailian2764 数根(POJ NOI0113-50)【数论】
问题链接:POJ NOI0113-50 数根. 数根 总时间限制: 1000ms 内存限制: 65536kB 描述 数根可以通过把一个数的各个位上的数字加起来得到.如果得到的数是一位数,那么这个数就是 ...
- POJ 3696 神TM数论
鸣谢: http://blog.csdn.net/yhrun/article/details/6908470 http://blog.sina.com.cn/s/blog_6a46cc3f0100tv ...
- 信息学竞赛中的数学知识 --- 容斥原理
C++基础数论-----容斥原理 C++基础数论-----容斥原理_C2020lax的博客-CSDN博客_容斥原理c++ C++数论容斥原理----无关的元素 C++数论容斥原理----无关的元素 - ...
- POJ前面的题目算法思路【转】
1000 A+B Problem 送分题 49% 2005-5-7 1001 Exponentiation 高精度 85% 2005-5-7 1002 487-3279 n/a 90% 2005-5- ...
- POJ 超详细分类
POJ 各题算法 1000 A+B Problem 送分题 49% 2005-5-7 1001 Exponentiation 高精度 ...
- 容斥原理与欧拉函数与莫比乌斯函数,狄利克雷卷积与莫比乌斯变换,反演
莫比乌斯函数可以看成是一种被内化了的容斥原理,许多数论上的结论定理根据容斥原理和数学归纳法可以推导出来,但是有关容斥原理的表达式的构造往往并不容易,运气不好很难找到,而莫比乌斯函数则是巧妙的把容斥原理 ...
最新文章
- 论文笔记:N-BEATS: NEURAL BASIS EXPANSION ANALYSIS FORINTERPRETABLE TIME SERIES FORECASTING
- BigData之Hbase:Hbase数据管理的简介、下载、案例应用之详细攻略
- eclipse序列化生成serialVersionUID
- 如何用JS获取页面上的所有标签
- sqlyog如何设置.时提示字段名_雷神新用户手册:拿到新电脑时如何简易设置参数!...
- leetcoed123. 买卖股票的最佳时机 III
- js text 和 html,JS DOM innerText和textContent的区别
- [转载] Java中日期格式转换
- 第四周笔记 c++ Boolan
- CISA已遭利用漏洞列表新增15个漏洞
- raw转bmp程序c语言,求指导,如何用c语言实现读取*.raw格式图像
- 一步一步学Repast 第一章 概要
- 图解排序算法之「冒泡排序」(详细解析)
- 【Windows】微软Bing搜索引擎服务器国内落户
- 织梦DedeCMS从入门到精通建站视频教程全集
- 激光雷达核心技术及行业格局梳理
- 4.3 期货每日早盘操作建议
- (附源码)计算机毕业设计SSM大学生互动交流论坛
- 抖音企业号,抖音搜索框SEO优化系统搭建。
- 内存错误检测工具——kfence工作原理分析