D. Count GCD

这道题严格来讲不难,a[i]与b[i+1]最大公约数为a[i+1],所以a[i]与b[i+1]必定整除a[i+1],且a[i]/a[i+1]与b[i+1]/a[i+1]互质,所以我们只需要求1~m/a[i+1]中与a[i]/a[i+1]互质的数的个数。

网上看了一些代码,觉得难以理解,决定自己动手写一篇。

容斥原理:要计算几个集合并集的大小,我们要先将所有单个集合的大小计算出来,然后减去所有两个集合相交的部分,再加回所有三个集合相交的部分,再减去所有四个集合相交的部分,依此类推,一直计算到所有集合相交的部分。

证明:二项式定理

若n为奇数,则令x=-1,y=1;

若n为偶数,则令x=1,y=-1;

可求得:

分解质因数:根据算术基本定理,不考虑排列顺序的情况下,每个正整数都能够以唯一的方式表示成它的质因数的乘积。

n=p1^a1 * p2^a2 *p3^a3.....pn^an

代码参上

#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
const int maxn=1e6+100;
/*
利用容斥原理,先求不互质的个数 ans,最后结果 n-ans。
假如 m 有 2,3,5质因子,那么2, 3, 5的倍数与 m都不互质,但是会有重复。用容斥原理算出正确的即可。
k / 2 + k / 3 + k / 5 - k / (2 * 3) - k / (3 * 5) - k / (2 * 5) + k / (2 * 3 * 5)
出现奇数次的加,出现偶数次的减。
代码枚举所有质因子的组合时用二进制枚举。
*/
//先求m的因子,存放到p数组里
ll n,m,cnt,p[maxn];
void get_factor(ll m){cnt=0;for(int i=2;i*i<=m;i++){if(m%i==0){p[cnt++]=i;while(m%i==0){m/=i;} }}if(m>1){p[cnt++]=m;}
}
ll solve(ll n){ll ans=0;//二进制枚举for(int i=1;i < (1 << cnt);i++){ll temp=1,t=0;for(int j=0;j<cnt;j++){if((1<<j)&i){temp*=p[j];t++;}}if(t%2==1){ans+=n/temp;}else{ans-=n/temp;}}return n-ans;
}
int main(){scanf("%d%d",&n,&m);get_factor(m);cout<<solve(n)<<endl;
}

关于求1~n中与m互质的数的个数(容器原理+数论分解质因子)相关推荐

  1. 欧拉函数:求小于等于n且与n互质的数的个数

    求小于等于n且与n互质的数的个数 互质穷举法 互质:两个数互质代表两者最大公约数为1 最大公约数求法:辗转相除法,最小公倍数:较大值除以最大公约数乘以较小值 辗转相除法: 较大的数a取模较小的数b,得 ...

  2. C语言试题三十四之求除1到m之内(含m)能北7或11整除的所有整数放在数组a中,通过n返回这些数的个数。

    1. 题目 请编写一个函数function,它的功能是:求除1到m之内(含m)能北7或11整除的所有整数放在数组a中,通过n返回这些数的个数. 2 .温馨提示 C语言试题汇总里可用于计算机二级C语言笔 ...

  3. C语言试题十三之求出1到100之内能被7或者11整除,但不能同时被7和11整除的所有整书,并将他们放在a所指的数组中,通过n返回这些数的个数。

    1. 题目 求出1到100之内能被7或者11整除,但不能同时被7和11整除的所有整书,并将他们放在a所指的数组中,通过n返回这些数的个数. 2 .温馨提示 C语言试题汇总里可用于计算机二级C语言笔试. ...

  4. matlab求被21整除,用matlab求[100,999]之间能被21整除的数的个数,还有建立一个字符串向量,删除大写字母._...

    怕散!|用户:的问题 用 matlab求[100,999]之间能被21整除的数的个数,还有建立一个字符串向量,删除大写字母. Promise丶陌影|用户:问问回答: clc;clear; m=0; f ...

  5. 计算机一级中的进制,计算机一级课程中介绍的不同进制数转换方法之数学原理.doc...

    本 科 生 毕 业 论 文(设 计) 2011 届 论文(设计)题目: 计算机一级课程中介绍的不同进制数转换 目 录 一.摘要····································· ...

  6. 欧拉函数(求与n互质的数的个数)

    求解与n(1-n-1)互质的质因子的个数 解析:(转) 定义:对于正整数n,φ(n)是小于或等于n的正整数中,与n互质的数的数目. 例如:φ(8)=4,因为1,3,5,7均和8互质. 性质:1.若p是 ...

  7. 整数:求数组Nums中只出现一次的数

    文章目录 题目 考察知识点 位运算 解题思路 总结 扩展:举一反三 解答思路 题目 数组Nums, 只有一个数只出现一次,其余的数都会出现3次. 例如: 输入: Nums[2,2,3,2]. 输出:3 ...

  8. openjudge #输出一个整数序列中与指定数字相同的数的个数。

    输入格式 输入包含三行:第一行为N,表示整数序列的长度(N <= 100):第二行为N个整数,整数之间以一个空格分开:第三行包含一个整数,为指定的整数m 输出模式 输出为N个数中与m相同的数的个 ...

  9. 如果用一个循环数组q[0..m-1]表示队列时,该队列只有一个队列头指针front,不设队列尾指针rear,求这个队列中从队列投到队列尾的元素个数(包含队列头、队列尾)。

    #include <iostream> using namespace std;//循环队列(少用一个空间)长度 #define M (8+1)typedef struct node {i ...

最新文章

  1. 别让自己变为一个废掉的程序猿
  2. IBM苏中:怎样利用深度学习、增强学习等方法提高信息处理效率
  3. git文件生命周期以及如何管理文件
  4. webstorm基础使用总结
  5. 计划策略-52-没有最终装配和没有MTO的计划
  6. Android SDK镜像的介绍使用【转发】
  7. 【机器视觉】dev_update_on和dev_update_off算子
  8. 我的Git使用-资料查询,名博笔记
  9. oppo 手机侧滑快捷菜单_关于oppo手机菜单键调出的方法,原来是这样的
  10. 【kafka】kafka offset 的存储 (存储zookeeper 与 存储 kafka)
  11. 最简单的视音频播放示例1:总述
  12. DataTable:执行DataTable.Select(条件)返回DataTable的解决方法
  13. 基于卷积神经网络的微表情识别研究需要注意的一些问题【未完待续】
  14. Visual Components 4.0仿真软件优势
  15. SLF4J user manual
  16. 编译UE4出现C1076错误的解决方法
  17. HBuilderXHBuilder连接雷电模拟器“未检测到手机或模拟器” ---- 问题解决
  18. 通话质量好的蓝牙耳机有哪些?通话质量好的蓝牙耳机盘点
  19. 2019腾讯区块链白皮书(附完整版下载)
  20. 反常积分(如何解题)

热门文章

  1. Win10系统播放器无法播放视频怎么办【系统天地】
  2. ABAP ALV OO 自定义Toolbar 和Command及listmenu按钮
  3. 王者荣耀测试自己本命英雄软件,王者荣耀中谁是你的本命英雄测试地址 趣推测试王者荣耀中谁是你的本命英雄...
  4. html js 修改img 图片不拉伸,Javascript防止图片拉伸的自适应处理方法
  5. WebKit、Safari以及SafariViewController
  6. CSS进阶(7)- 样式补充
  7. 有关于3GPP SUL的一些学习
  8. YOLOV3在windwos下的配置和训练过程简述
  9. Python爬虫解析当红网剧之《我是余欢水》
  10. SQLServer ODBC 驱动的区别