(洛谷P4213)杜教筛
https://www.cnblogs.com/Mychael/p/8744633.html
#pragma GCC optimize(3, "Ofast", "inline") #include <bits/stdc++.h> #define start ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define ll long long
//#define int ll
#define ls st<<1
#define rs st<<1|1
using namespace std;
const int maxn = (ll) 5e6 + 5;
const int mod = 1000000007;
const int inf = 0x3f3f3f3f;
int mu[maxn];
ll phi[maxn];
bool vis[maxn];
int v[maxn]; inline void init() {
int cnt = 0;
mu[1] = phi[1] = 1;
for (int i = 2; i < maxn; ++i) {
if (!vis[i]) {
v[++cnt] = i;
mu[i] = -1;
phi[i] = i - 1;
}
for (int t = 1; t <= cnt && i * v[t] < maxn; ++t) {
int j = v[t];
vis[i * j] = true;
if (i % j) {
mu[i * j] = -mu[i];
phi[i * j] = phi[i] * phi[j];
} else {
mu[i * j] = 0;
phi[i * j] = phi[i] * j;
break;
}
}
}
for (int i = 1; i < maxn; ++i) {
mu[i] += mu[i - 1];
phi[i] += phi[i - 1];
}
} unordered_map<int, ll> ansphi;
unordered_map<int, ll> ansmu; inline int getmu(int n) {
if (n < maxn)
return mu[n];
if (ansmu[n])
return ansmu[n];
int ans = 1;
for (unsigned int l = 2, r; l <= n; l = r + 1) {
r = n / (n / l);
ans -= (r - l + 1) * getmu(n / l);
}
return ansmu[n] = ans;
} inline ll getphi(int n) {
if (n < maxn)
return phi[n];
if (ansphi[n])
return ansphi[n];
ll ans = 1ll*n * (n + 1) / 2;
for (unsigned int l = 2, r; l <= n; l = r + 1) {
r = n / (n / l);
ans -= (r - l + 1) * getphi(n / l);
}
return ansphi[n] = ans;
} signed main() {
start;
init();
int T;
cin >> T;
while (T--) {
int n;
cin >> n;
cout << getphi(n) << ' ' << getmu(n) << '\n';
}
return 0;
}
(洛谷P4213)杜教筛的更多相关文章
- luogu 3768 简单的数学题 (莫比乌斯反演+杜教筛)
题目大意:略 洛谷传送门 杜教筛入门题? 以下都是常规套路的变形,不再过多解释 $\sum\limits_{i=1}^{N}\sum\limits_{j=1}^{N}ijgcd(i,j)$ $\sum ...
- 洛谷P4213 Sum(杜教筛)
题目描述 给定一个正整数N(N\le2^{31}-1)N(N≤231−1) 求ans_1=\sum_{i=1}^n\phi(i),ans_2=\sum_{i=1}^n \mu(i)ans1=∑i=1 ...
- [洛谷P4213]【模板】杜教筛(Sum)
题目大意:给你$n$,求:$$\sum\limits_{i=1}^n\varphi(i),\sum\limits_{i=1}^n\mu(i)$$最多$10$组数据,$n\leqslant2^{31}- ...
- 「洛谷P3768」简单的数学题 莫比乌斯反演+杜教筛
题目链接 简单的数学题 题目描述 输入一个整数n和一个整数p,你需要求出 \[\sum_{i=1}^n\sum_{j=1}^n (i\cdot j\cdot gcd(i,j))\ mod\ p\] ...
- 洛谷P3768 简单的数学题 【莫比乌斯反演 + 杜教筛】
题目描述 求 \[\sum\limits_{i=1}^{n} \sum\limits_{j=1}^{n} i*j*gcd(i,j) \pmod{p}\] \(n<=10^{10}\),\(p\) ...
- 洛谷P3768 简单的数学题 莫比乌斯反演+杜教筛
题意简述 求出这个式子 \[ \sum_{i=1}^n\sum_{j=1}^n ij(i,j) \bmod p \] 做法 先用莫比乌斯反演拆一下式子 \[ \begin{split} \sum_{i ...
- 洛谷 P6860 - 象棋与马(找性质+杜教筛)
题面传送门 首先我们来探究一下什么样的 \((a,b)\) 满足 \(p(a,b)=1\).不难发现只要点 \((1,0)\) 能够到达,那么网格上所有点都能到达,因为由于 \((1,0)\) 能够到 ...
- p4213 【模板】杜教筛(Sum)
传送门 分析 我们知道 $\varphi * 1 = id$ $\mu * 1 = e$ 杜教筛即可 代码 #include<iostream> #include<cstdio> ...
- P4213 【模板】杜教筛(Sum)
\(\color{#0066ff}{题 目 描 述}\) 给定一个正整数\(N(N\le2^{31}-1)\) 求 \(\begin{aligned} ans_1=\sum_{i=1}^n\varph ...
- P4213【模板】杜教筛(Sum)
思路:杜教筛 提交:\(2\)次 错因:\(\varphi(i)\)的前缀和用\(int\)存的 题解: 对于一类筛积性函数前缀和的问题,杜教筛可以以低于线性的时间复杂度来解决问题. 先要构造\(h= ...
随机推荐
- Javascript 常见的循环方式总结
本文地址: https://www.cnblogs.com/zichliang/p/17412968.html 在Javascript中有很多种循环方式.有多种循环方式可以用来遍历数组.对象.以及执行 ...
- JAVA 23种设计模式(小白进阶必经之路)
如今几乎所有程序都遵循万物皆对象的开发理念,然在写程序中我们用的最多的应该是封装(encapsulation).继承(inheritance).多态(Polymorphism)开发模式:而更高一个境界 ...
- Spring Boot实现高质量的CRUD-3
(续前文) 7.Service接口类 Service类提供业务的实现逻辑,其调用Dao类的方法进行数据存取,并为Controller类提供方法.类似于Dao的接口类,服务层使用接口类,便于代码 ...
- Swift4 入门到精通(第二章基本数据类型与量值)
第二章 量值和基本数据类型 Swift 支持的基本数据类型, 整型,浮点型,布尔型,元组,可选类型. 学习的目标: 常量与变量的意义.声明.命名规范.类型 数据进制与计算机存储原理 整型数据.浮点型数 ...
- 【tvm解析】PACKFUNC机制
为实现多种语言支持,需要满足以下几点: 部署:编译结果可以从python/javascript/c++调用. Debug: 在python中定义一个函数,在编译函数中调用. 链接:编写驱动程序以调用设 ...
- IDEA2021.3.3使用
下载文件 :ja-netfilter-all-2021.3.3 激活码 : P29GTZBZ3Y-eyJsaWNlbnNlSWQiOiJQMjlHVFpCWjNZIiwibGljZW5zZWVOYW1 ...
- qrcode模块生成二维码
安装qrcode模块 pip install qrcode 简单使用 import qrcode data = 'hello world' img = qrcode.make(data) # 显示二维 ...
- Leecode SQL
618 学生地理信息报告 一所学校有来自亚洲.欧洲和美洲的学生.写一个查询语句实现对大洲(continent) 列的透视表操作,使得每个学生按照姓名的字母顺序依次排列在对应的大洲下面.输出的标题应依次 ...
- Blazor前后端框架Known-V1.2.2
V1.2.2 Known是基于C#和Blazor开发的前后端分离快速开发框架,开箱即用,跨平台,一处代码,多处运行. 概述 基于C#和Blazor实现的快速开发框架,前后端分离,开箱即用. 跨平台,单 ...
- python图表展示实例
"""Created on Fri Nov 8 16:09:36 2019 @author: DELL""" ""&qu ...