关于求1~n中与m互质的数的个数(容器原理+数论分解质因子)
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互质的数的个数(容器原理+数论分解质因子)相关推荐
- 欧拉函数:求小于等于n且与n互质的数的个数
求小于等于n且与n互质的数的个数 互质穷举法 互质:两个数互质代表两者最大公约数为1 最大公约数求法:辗转相除法,最小公倍数:较大值除以最大公约数乘以较小值 辗转相除法: 较大的数a取模较小的数b,得 ...
- C语言试题三十四之求除1到m之内(含m)能北7或11整除的所有整数放在数组a中,通过n返回这些数的个数。
1. 题目 请编写一个函数function,它的功能是:求除1到m之内(含m)能北7或11整除的所有整数放在数组a中,通过n返回这些数的个数. 2 .温馨提示 C语言试题汇总里可用于计算机二级C语言笔 ...
- C语言试题十三之求出1到100之内能被7或者11整除,但不能同时被7和11整除的所有整书,并将他们放在a所指的数组中,通过n返回这些数的个数。
1. 题目 求出1到100之内能被7或者11整除,但不能同时被7和11整除的所有整书,并将他们放在a所指的数组中,通过n返回这些数的个数. 2 .温馨提示 C语言试题汇总里可用于计算机二级C语言笔试. ...
- matlab求被21整除,用matlab求[100,999]之间能被21整除的数的个数,还有建立一个字符串向量,删除大写字母._...
怕散!|用户:的问题 用 matlab求[100,999]之间能被21整除的数的个数,还有建立一个字符串向量,删除大写字母. Promise丶陌影|用户:问问回答: clc;clear; m=0; f ...
- 计算机一级中的进制,计算机一级课程中介绍的不同进制数转换方法之数学原理.doc...
本 科 生 毕 业 论 文(设 计) 2011 届 论文(设计)题目: 计算机一级课程中介绍的不同进制数转换 目 录 一.摘要····································· ...
- 欧拉函数(求与n互质的数的个数)
求解与n(1-n-1)互质的质因子的个数 解析:(转) 定义:对于正整数n,φ(n)是小于或等于n的正整数中,与n互质的数的数目. 例如:φ(8)=4,因为1,3,5,7均和8互质. 性质:1.若p是 ...
- 整数:求数组Nums中只出现一次的数
文章目录 题目 考察知识点 位运算 解题思路 总结 扩展:举一反三 解答思路 题目 数组Nums, 只有一个数只出现一次,其余的数都会出现3次. 例如: 输入: Nums[2,2,3,2]. 输出:3 ...
- openjudge #输出一个整数序列中与指定数字相同的数的个数。
输入格式 输入包含三行:第一行为N,表示整数序列的长度(N <= 100):第二行为N个整数,整数之间以一个空格分开:第三行包含一个整数,为指定的整数m 输出模式 输出为N个数中与m相同的数的个 ...
- 如果用一个循环数组q[0..m-1]表示队列时,该队列只有一个队列头指针front,不设队列尾指针rear,求这个队列中从队列投到队列尾的元素个数(包含队列头、队列尾)。
#include <iostream> using namespace std;//循环队列(少用一个空间)长度 #define M (8+1)typedef struct node {i ...
最新文章
- 别让自己变为一个废掉的程序猿
- IBM苏中:怎样利用深度学习、增强学习等方法提高信息处理效率
- git文件生命周期以及如何管理文件
- webstorm基础使用总结
- 计划策略-52-没有最终装配和没有MTO的计划
- Android SDK镜像的介绍使用【转发】
- 【机器视觉】dev_update_on和dev_update_off算子
- 我的Git使用-资料查询,名博笔记
- oppo 手机侧滑快捷菜单_关于oppo手机菜单键调出的方法,原来是这样的
- 【kafka】kafka offset 的存储 (存储zookeeper 与 存储 kafka)
- 最简单的视音频播放示例1:总述
- DataTable:执行DataTable.Select(条件)返回DataTable的解决方法
- 基于卷积神经网络的微表情识别研究需要注意的一些问题【未完待续】
- Visual Components 4.0仿真软件优势
- SLF4J user manual
- 编译UE4出现C1076错误的解决方法
- HBuilderXHBuilder连接雷电模拟器“未检测到手机或模拟器” ---- 问题解决
- 通话质量好的蓝牙耳机有哪些?通话质量好的蓝牙耳机盘点
- 2019腾讯区块链白皮书(附完整版下载)
- 反常积分(如何解题)
热门文章
- Win10系统播放器无法播放视频怎么办【系统天地】
- ABAP ALV OO 自定义Toolbar 和Command及listmenu按钮
- 王者荣耀测试自己本命英雄软件,王者荣耀中谁是你的本命英雄测试地址 趣推测试王者荣耀中谁是你的本命英雄...
- html js 修改img 图片不拉伸,Javascript防止图片拉伸的自适应处理方法
- WebKit、Safari以及SafariViewController
- CSS进阶(7)- 样式补充
- 有关于3GPP SUL的一些学习
- YOLOV3在windwos下的配置和训练过程简述
- Python爬虫解析当红网剧之《我是余欢水》
- SQLServer ODBC 驱动的区别