【bzoj4916】神犇和蒟蒻 杜教筛
题目描述
输入
输出
样例输入
1
样例输出
1
1
题解
杜教筛
第一问的答案毫无疑问肯定是1(wow~ ⊙o⊙),毕竟除了i=1以外质因子的幂次一定大于等于2。
对于第二问欧拉函数Φ(i^2)=iΦ(i),因为将i分解质因数,质因子的幂次一定大于等于2且为偶数。我们计算欧拉函数时,如果出现p^a,那么是算进答案(p-1)*p^(a-1)。如果把p^(a/2)的部分取出,剩下的是Φ(i)的部分,而取出的是i的部分,因此答案是∑iΦ(i)。
现在只要求∑iΦ(i)即可。
我们把它与id求卷积,发现形式就是n^2。
所以有:
其中重点是因子与乘积的转化,在公式第2、3行将枚举乘积i转化为枚举2行的i/d和d,即3行的i和j。
先预处理出n2/3的部分,超过的部分对于每个n/i进行递归,记忆化搜索,使用map储存。
总时间复杂度O(n2/3logn)。
这里有一个小细节:除的数固定并且很小时不需要求逆元,直接将模数扩大相应倍数,正常取模,最后再模下去。
#include <cstdio>
#include <map>
#define N 1000010
#define mod 6000000042ll
using namespace std;
typedef long long ll;
map<ll , ll> f;
map<ll , ll>::iterator it;
ll m = 1000000 , phi[N] , prime[N] , tot , sum[N];
bool np[N];
ll s1(ll l , ll r)
{return (l + r) * (r - l + 1) % mod / 2;
}
ll s2(ll x)
{return x * (x + 1) % mod * (2 * x + 1) % mod / 6;
}
ll query(ll n)
{if(n <= m) return sum[n];it = f.find(n);if(it != f.end()) return it->second;ll ans = s2(n) , i , last;for(i = 2 ; i <= n ; i = last + 1) last = n / (n / i) , ans = (ans - s1(i , last) * query(n / i) % mod + mod) % mod;f[n] = ans;return ans;
}
int main()
{ll i , j , n;phi[1] = sum[1] = 1;for(i = 2 ; i <= m ; i ++ ){if(!np[i]) phi[i] = i - 1 , prime[++tot] = i;for(j = 1 ; j <= tot && i * prime[j] <= m ; j ++ ){np[i * prime[j]] = 1;if(i % prime[j] == 0){phi[i * prime[j]] = phi[i] * prime[j];break;}else phi[i * prime[j]] = phi[i] * (prime[j] - 1);}sum[i] = (sum[i - 1] + i * phi[i]) % mod;}scanf("%lld" , &n);printf("1\n%lld\n" , query(n) % 1000000007);return 0;
}
转载于:https://www.cnblogs.com/GXZlegend/p/6957885.html
【bzoj4916】神犇和蒟蒻 杜教筛相关推荐
- bzoj4916 神犇和蒟蒻
求μ\mu的不用说了. 构造和式 ∑i=1n∑d|iφ(d)∗d∗id \sum_{i=1}^n\sum_{d|i}\varphi(d)*d*\frac i d 一方面 上式=∑ni=1i2\text ...
- bzoj4916: 神犇和蒟蒻(杜教筛)
Description 很久很久以前,有一只神犇叫yzy; 很久很久之后,有一只蒟蒻叫lty; Input 请你读入一个整数N;1<=N<=109,A.BN;1<=N<=10^ ...
- 【BZOJ4916】神犇和蒟蒻(杜教筛)
[BZOJ4916]神犇和蒟蒻(杜教筛) https://www.cnblogs.com/cjyyb/p/8297338.html 杜教筛技巧
- 【BZOJ4916】神犇与蒟蒻
题面 Description 很久很久以前,有一只神犇叫yzy; 很久很久之后,有一只蒟蒻叫lty; Input 请你读入一个整数N;\(1<=N<=10^9\),A.B模\(10^9+7 ...
- BZOJ 4916 神犇和蒟蒻
题目链接 https://lydsy.com/JudgeOnline/problem.php?id=4916 题解 ∑i=1Nμ(i2)=1∑i=1Nφ(i2)=∑i=1Niφ(i) \sum_{i= ...
- [BZOJ 4916]神犇和蒟蒻
传送门 Description \[ sum_G(n)=\sum_{i=1}^n \mu(i^2)\\sum_F(n)=\sum_{i=1}^n \phi(i^2) \] Solution For a ...
- [学习笔记] 初次见面,请多关照 (公式推导+题集)——杜教筛
筛积性函数的前缀和 常见积性函数 公式推导 狄利克雷卷积 杜教筛 实现 常见卷积 习题集 Sum 神犇和蒟蒻 简单的数学题 常见积性函数 μ\muμ φφφ d(n)d(n)d(n):nnn的约数个数 ...
- 杜教筛 (包括线筛) 莫比乌斯函数前缀和 欧拉函数前缀和 因数和函数前缀和 因子个数前缀和 ( 分析 )...
对于莫比乌斯函数 和 欧拉函数 小于 1e8差不多都可线筛 1e12以内 杜教筛 代码针对洛古 p4213 n<=(1<<31)-1 杜教筛 #include< ...
- 51nod 1220 约数之和【莫比乌斯反演+杜教筛】
首先由这样一个式子:\( d(ij)=\sum_{p|i}\sum_{q|j}[gcd(p,q)==1]\frac{pj}{q} \)大概感性证明一下吧我不会证 然后开始推: \[ \sum_{i=1 ...
最新文章
- 一些设计思想的汇集(2)
- 电压越低采集的ad值反而变大_80多条关于AD转换设计的经验总结
- 有三AI知识星球官宣,BAT等大咖等你来撩
- 【微信小程序】二维码跳转规则的前缀匹配是什么意思?
- resnet50训练imagenet记录
- 京东购物车的 Java 架构实现及原理
- python爬取数据保存为csv时生成编号_将爬取到到数据以CSV格式存储
- html布局基础,HTML 布局 - HTML 基础教程
- java切面获取异常日志_spring aop 配置切面,记录系统异常存入log日志
- 循环神经网络(RNN)和LSTM初学者指南 | 入门资料
- ASP.NET CORE的Code Fist后Models更改了怎么办?
- 开发问题及解决 java.lang.ClassCastException:android.widget.LinearLayout$LayoutParams
- 微信小程序云开发教程-云函数操作数据库-修改、删除
- VMware Cloud Director 10.3 发布(下载) - 云计算调配和管理平台
- ios 按钮下面加下划线_iOS 给部分文字加下划线四种方法
- 第五章 Spanning Tree协议安全攻防
- 使用BasicExcel操作Excel
- 如何评价范冰新书《增长黑客》?
- 2017年Go语言入门教程-徐培成-专题视频课程
- 如何实现ArrayList的线程安全