题目链接:点击查看

题目大意:中文题意,不多赘述

题目分析:根据题目的意思,其实只需要让所有数的最大公约数为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 跳蚤(容斥原理+数论)相关推荐

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

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

  2. POJ 1091 跳蚤

    跳蚤 Time Limit: 1000ms Memory Limit: 10000KB This problem will be judged on PKU. Original ID: 1091 64 ...

  3. POJ 1091(数论)

    题目大意是给定两个整数n和m,求出长度为n+1满足条件的数列data的个数,数列的要求下: 1)1<=data[i]<=m,for1<=i<=n 2)data[n+1]=m; ...

  4. Bailian2764 数根(POJ NOI0113-50)【数论】

    问题链接:POJ NOI0113-50 数根. 数根 总时间限制: 1000ms 内存限制: 65536kB 描述 数根可以通过把一个数的各个位上的数字加起来得到.如果得到的数是一位数,那么这个数就是 ...

  5. POJ 3696 神TM数论

    鸣谢: http://blog.csdn.net/yhrun/article/details/6908470 http://blog.sina.com.cn/s/blog_6a46cc3f0100tv ...

  6. 信息学竞赛中的数学知识 --- 容斥原理

    C++基础数论-----容斥原理 C++基础数论-----容斥原理_C2020lax的博客-CSDN博客_容斥原理c++ C++数论容斥原理----无关的元素 C++数论容斥原理----无关的元素 - ...

  7. POJ前面的题目算法思路【转】

    1000 A+B Problem 送分题 49% 2005-5-7 1001 Exponentiation 高精度 85% 2005-5-7 1002 487-3279 n/a 90% 2005-5- ...

  8. POJ 超详细分类

    POJ 各题算法 1000    A+B Problem            送分题     49%    2005-5-7 1001    Exponentiation         高精度   ...

  9. 容斥原理与欧拉函数与莫比乌斯函数,狄利克雷卷积与莫比乌斯变换,反演

    莫比乌斯函数可以看成是一种被内化了的容斥原理,许多数论上的结论定理根据容斥原理和数学归纳法可以推导出来,但是有关容斥原理的表达式的构造往往并不容易,运气不好很难找到,而莫比乌斯函数则是巧妙的把容斥原理 ...

最新文章

  1. 论文笔记:N-BEATS: NEURAL BASIS EXPANSION ANALYSIS FORINTERPRETABLE TIME SERIES FORECASTING
  2. BigData之Hbase:Hbase数据管理的简介、下载、案例应用之详细攻略
  3. eclipse序列化生成serialVersionUID
  4. 如何用JS获取页面上的所有标签
  5. sqlyog如何设置.时提示字段名_雷神新用户手册:拿到新电脑时如何简易设置参数!...
  6. leetcoed123. 买卖股票的最佳时机 III
  7. js text 和 html,JS DOM innerText和textContent的区别
  8. [转载] Java中日期格式转换
  9. 第四周笔记 c++ Boolan
  10. CISA已遭利用漏洞列表新增15个漏洞
  11. raw转bmp程序c语言,求指导,如何用c语言实现读取*.raw格式图像
  12. 一步一步学Repast 第一章 概要
  13. 图解排序算法之「冒泡排序」(详细解析)
  14. 【Windows】微软Bing搜索引擎服务器国内落户
  15. 织梦DedeCMS从入门到精通建站视频教程全集
  16. 激光雷达核心技术及行业格局梳理
  17. 4.3 期货每日早盘操作建议
  18. (附源码)计算机毕业设计SSM大学生互动交流论坛
  19. 抖音企业号,抖音搜索框SEO优化系统搭建。
  20. 内存错误检测工具——kfence工作原理分析

热门文章

  1. 带指针C语言代码,C语言指针(示例代码)
  2. 为什么需要Survivor区?只有Eden不行吗?
  3. 为什么需要动态SQL?
  4. Collection集合概述
  5. spring中的aop术语和细节
  6. 上传文件漏洞案例分析
  7. 文件操作-小文件复制
  8. 【报错笔记】sturts2程序运行出现错误:Struts has detected an unhandled exception
  9. View 绘制流程分析
  10. 2018.7月Vue优质开源项目清单