题目描述

很久很久以前,有一只神犇叫yzy;
很久很久之后,有一只蒟蒻叫lty;

输入

请你读入一个整数N;1<=N<=1E9,A、B模1E9+7;

输出

请你输出一个整数A=\sum_{i=1}^N{\mu (i^2)};
请你输出一个整数B=\sum_{i=1}^N{\varphi (i^2)};

样例输入

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】神犇和蒟蒻 杜教筛相关推荐

  1. 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 ...

  2. bzoj4916: 神犇和蒟蒻(杜教筛)

    Description 很久很久以前,有一只神犇叫yzy; 很久很久之后,有一只蒟蒻叫lty; Input 请你读入一个整数N;1<=N<=109,A.BN;1<=N<=10^ ...

  3. 【BZOJ4916】神犇和蒟蒻(杜教筛)

    [BZOJ4916]神犇和蒟蒻(杜教筛) https://www.cnblogs.com/cjyyb/p/8297338.html 杜教筛技巧

  4. 【BZOJ4916】神犇与蒟蒻

    题面 Description 很久很久以前,有一只神犇叫yzy; 很久很久之后,有一只蒟蒻叫lty; Input 请你读入一个整数N;\(1<=N<=10^9\),A.B模\(10^9+7 ...

  5. BZOJ 4916 神犇和蒟蒻

    题目链接 https://lydsy.com/JudgeOnline/problem.php?id=4916 题解 ∑i=1Nμ(i2)=1∑i=1Nφ(i2)=∑i=1Niφ(i) \sum_{i= ...

  6. [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 ...

  7. [学习笔记] 初次见面,请多关照 (公式推导+题集)——杜教筛

    筛积性函数的前缀和 常见积性函数 公式推导 狄利克雷卷积 杜教筛 实现 常见卷积 习题集 Sum 神犇和蒟蒻 简单的数学题 常见积性函数 μ\muμ φφφ d(n)d(n)d(n):nnn的约数个数 ...

  8. 杜教筛 (包括线筛) 莫比乌斯函数前缀和 欧拉函数前缀和 因数和函数前缀和 因子个数前缀和 ( 分析 )...

    对于莫比乌斯函数 和 欧拉函数  小于 1e8差不多都可线筛    1e12以内  杜教筛 代码针对洛古  p4213  n<=(1<<31)-1  杜教筛 #include< ...

  9. 51nod 1220 约数之和【莫比乌斯反演+杜教筛】

    首先由这样一个式子:\( d(ij)=\sum_{p|i}\sum_{q|j}[gcd(p,q)==1]\frac{pj}{q} \)大概感性证明一下吧我不会证 然后开始推: \[ \sum_{i=1 ...

最新文章

  1. 一些设计思想的汇集(2)
  2. 电压越低采集的ad值反而变大_80多条关于AD转换设计的经验总结
  3. 有三AI知识星球官宣,BAT等大咖等你来撩
  4. 【微信小程序】二维码跳转规则的前缀匹配是什么意思?
  5. resnet50训练imagenet记录
  6. 京东购物车的 Java 架构实现及原理
  7. python爬取数据保存为csv时生成编号_将爬取到到数据以CSV格式存储
  8. html布局基础,HTML 布局 - HTML 基础教程
  9. java切面获取异常日志_spring aop 配置切面,记录系统异常存入log日志
  10. 循环神经网络(RNN)和LSTM初学者指南 | 入门资料
  11. ASP.NET CORE的Code Fist后Models更改了怎么办?
  12. 开发问题及解决 java.lang.ClassCastException:android.widget.LinearLayout$LayoutParams
  13. 微信小程序云开发教程-云函数操作数据库-修改、删除
  14. VMware Cloud Director 10.3 发布(下载) - 云计算调配和管理平台
  15. ios 按钮下面加下划线_iOS 给部分文字加下划线四种方法
  16. 第五章 Spanning Tree协议安全攻防
  17. 使用BasicExcel操作Excel
  18. 如何评价范冰新书《增长黑客》?
  19. 2017年Go语言入门教程-徐培成-专题视频课程
  20. 如何实现ArrayList的线程安全

热门文章

  1. code first基础
  2. 某程序的bug是什么意思?
  3. 常见Web安全漏洞--------sql注入
  4. 顺序表的结构和9个基本运算算法
  5. 【Java架构:持续交付】一篇文章搞掂:持续交付理论
  6. SPOJ - VLATTICE
  7. sqlserver 循环赋值变量
  8. 用border-width,border-color画三角形
  9. 模块20135304——刘世鹏
  10. Qt 学习之路 2(79):QML 组件