数论之容斥原理 您所在的位置:网站首页 x的-1次方等于多少是什么知识点 数论之容斥原理

数论之容斥原理

2023-06-30 08:54| 来源: 网络整理| 查看: 265

画韦恩图

原理:S=s1+s2+s3-s1^s2-s2^s3-s1^s3+s1^s2^s3

推广:S=s1+s2+s3+s4-s1^s2-s2^s3-s1^s3-s1^s4-s2^s4-s3^s4+s1^s2^s3+s1^s2^s4+s2^s3^s4-s1^s2^s3^s4;n个同理

口诀:奇加偶减

时间复杂度:2^n

选法集合个数:2^n-1;

例题:能被整除的数

 分析

#include #include using namespace std; typedef long long LL; const int N = 20; int p[N]; int main() { int n, m; cin >> n >> m; // 用p数组存储m个质数 for (int i = 0; i < m; i ++ ) cin >> p[i]; int res = 0; // 1、每一个i代表一种可能的取法,最外层的循环遍历置2的m次方后,可以取完所有的取法 // ① 为什么是2的m次方?最外层循环的作用是什么? // 从1开始枚举,枚举到1 j & 1) { // (LL)t * p[j] > n // 如果t(已有的质数选法)乘上这个质数大于给定的数n,说明1∼n中的数不能被p整除 // 此时直接返回break,跳过这个质数 if ((LL)t * p[j] > n) { t = -1; break; // break的作用域是跳出整个循环 } // 将该质数乘到t中 t *= p[j]; // s表示当前选法中有多少个集合 s ++ ; } } // 再将提取出的取法代入公式- // 如果t不等于-1(-1是给定的flag值) if (t != -1) { // ③ s为什么要模2? if (s % 2) res += n / t; else res -= n / t; } } cout


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有