Description

很久很久以前,有一只神犇叫yzy;

很久很久之后,有一只蒟蒻叫lty;

Input

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

Output

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

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

Sample Input

1

Sample Output

1

1


思路

首先发现第一个一定是1.。。。

然后发现第二个其实可以表示成

\[\sum_{i = 1}^n\phi(i)*i
\]

然后我们令

\[f(i)=\phi(i)*i
\\
g(i)=i
\]

那么可以得到

\[ans=Sum(n)=\sum_{i=1}^nf(i)
\]

又因为

\[\sum_{i = 1}^n\sum_{d|i}f(d)g(\frac{i}{d})=\sum_{i=1}^n i^2=\frac{n *(n + 1)*(2n+1)}{6}
\]

\[\sum_{i = 1}^n\sum_{d|i}f(d)g(\frac{i}{d})=\sum_{k = 1}^ng(k)\sum_{d = 1}^{\lfloor\frac{n}{k}\rfloor}f(d)=\sum_{k = 1}^ng(k)Sum(\lfloor\frac{n}{k}\rfloor)
\]

所以有

\[Sum(n)=\frac{n *(n + 1)*(2n+1)}{6}-\sum_{k = 2}^ng(k)Sum(\lfloor\frac{n}{k}\rfloor)
\]

然后上杜教筛板子。。


  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. const ll Mod = 1e9 + 7;
  5. const ll N = 1e7 + 10;
  6. const ll inv6 = 166666668;
  7. const ll inv2 = 500000004;
  8. ll prime[N], cnt = 0;
  9. ll phi[N], sum[N], vis[N];
  10. map<ll, ll> mp;
  11. ll add(ll a, ll b) {
  12. return (a += b) >= Mod ? a - Mod : a;
  13. }
  14. ll sub(ll a, ll b) {
  15. return (a -= b) < 0 ? a + Mod : a;
  16. }
  17. ll mul(ll a, ll b) {
  18. return a * b % Mod;
  19. }
  20. void get_prime() {
  21. phi[1] = 1;
  22. for (ll i = 2; i < N; i++) {
  23. if (!vis[i]) {
  24. phi[i] = i - 1;
  25. prime[++cnt] = i;
  26. }
  27. for (ll j = 1; j <= cnt && i * prime[j] < N; j++) {
  28. vis[i * prime[j]] = 1;
  29. if (i % prime[j] == 0) {
  30. phi[i * prime[j]] = phi[i] * prime[j];
  31. break;
  32. } else {
  33. phi[i * prime[j]] = phi[i] * (prime[j] - 1);
  34. }
  35. }
  36. }
  37. for (ll i = 1; i < N; i++)
  38. sum[i] = add(sum[i - 1], mul(i, phi[i]));
  39. }
  40. ll solve(ll n) {
  41. if (n < N) return sum[n];
  42. if (mp.count(n)) return mp[n];
  43. ll res = mul(mul(n, n + 1), mul(2 * n + 1, inv6));
  44. for (ll i = 2; i <= n; i++) {
  45. ll j = n / (n / i);
  46. res = sub(res, mul(solve(n / i), mul(inv2, mul(i + j, j - i + 1))));
  47. i = j;
  48. }
  49. return mp[n] = res;
  50. }
  51. int main() {
  52. get_prime();
  53. ll n; cin >> n;
  54. cout << 1 << "\n" << solve(n);
  55. return 0;
  56. }

BZOJ4916: 神犇和蒟蒻【杜教筛】的更多相关文章

  1. BZOJ4916: 神犇和蒟蒻(杜教筛)

    题意 求 $$\sum_{i = 1}^n \mu(i^2)$$ $$\sum_{i = 1}^n \phi(i^2)$$ $n \leqslant 10^9$ Sol zz的我看第一问看了10min ...

  2. [BZOJ4916]神犇和蒟蒻 杜教筛/Min_25筛

    题目大意: 给定\(n\le 10^9\),求: 1.\(\sum_{i=1}^n\mu(i^2)\) 2.\(\sum_{i=1}^n\varphi(i^2)\) 解释 1.\(\sum_{i=1} ...

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

    题目传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=4916 第一个询问即求出$\sum_{i=1}^{n} { \mu (i^2)} $,考虑 ...

  4. LG4213 【模板】杜教筛(Sum)和 BZOJ4916 神犇和蒟蒻

    P4213 [模板]杜教筛(Sum) 题目描述 给定一个正整数$N(N\le2^{31}-1)$ 求 $$ans_1=\sum_{i=1}^n\varphi(i)$$ $$ans_2=\sum_{i= ...

  5. BZOJ4916 神犇和蒟蒻 【欧拉函数 + 杜教筛】

    题目 很久很久以前,有一只神犇叫yzy; 很久很久之后,有一只蒟蒻叫lty; 输入格式 请你读入一个整数N;1<=N<=1E9,A.B模1E9+7; 输出格式 请你输出一个整数A=\sum ...

  6. BZOJ4916 神犇和蒟蒻(欧拉函数+杜教筛)

    第一问是来搞笑的.由欧拉函数的计算公式容易发现φ(i2)=iφ(i).那么可以发现φ(n2)*id(n)(此处为卷积)=Σd*φ(d)*(n/d)=nΣφ(d)=n2 .这样就有了杜教筛所要求的容易算 ...

  7. Bzoj4916: 神犇和蒟蒻

    题面 传送门 Sol 第一问puts("1") 第二问,\(\varphi(i^2)=i\varphi(i)\) 设\(\phi(n)=\sum_{i=1}^{n}i\varphi ...

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

    [BZOJ4916]神犇和蒟蒻(杜教筛) 题面 BZOJ 求 \[\sum_{i=1}^n\mu(i^2)\ \ 和\ \sum_{i=1}^n\phi(i^2)\] 其中\[n<=10^9\] ...

  9. 【BZOJ4916】神犇和蒟蒻 解题报告

    [BZOJ4916]神犇和蒟蒻 Description 很久很久以前,有一群神犇叫sk和ypl和ssr和hjh和hgr和gjs和yay和xj和zwl和dcx和lyy和dtz和hy和xfz和myh和yw ...

随机推荐

  1. Bate冲刺四——《WAP团队》

    β冲刺第四天  1. 今日完成任务情况以及遇到的问题. ①马麒.杜有海:记录功能完善情况 ②郝明宇:记录验收情况 ③马宏伟.周欣:后台前端数据连接 ④乌勒扎:综合测试 2.成员时间贡献   成员 马宏 ...

  2. ubuntu 安装 openssh-server,xinetd,vmware tools

    ●安装SSH服务 ●判断是否安装ssh服务,通过如下命令:ps -e|grep ssh 1, sudo apt-get update --->软件的更新地址变了,需要更新本机的sources.l ...

  3. Vue项目骨架屏注入实践

    相比于早些年前后端代码紧密耦合.后端工程师还得写前端代码的时代,如今已发展到前后端分离,这种开发方式大大提升了前后端项目的可维护性与开发效率,让前后端工程师关注于自己的主业.然而在带来便利的同时,也带 ...

  4. 20170706wdVBA正则表达式提取题目

    Public Sub GetContents() Dim Reg As Object Dim Matches As Object Dim OneMatch As Object Dim Index As ...

  5. mxnet(gluon) 实现DQN简单小例子

    参考文献 莫凡系列课程视频 增强学习入门之Q-Learning 关于增强学习的基本知识可以参考第二个链接,讲的挺有意思的.DQN的东西可以看第一个链接相关视频.课程中实现了Tensorflow和pyt ...

  6. iterator not dereferencable问题

    STL中的迭代器总是出现各种问题,这个是我在打表达式求值时碰到的... 综合网上的答案,一般来说有两种情况: 第一:访问了非法位置. 一般来说可能在queue为空时取front(),rear(),或者 ...

  7. shiro学习笔记-Subject#login(token)实现过程

    本博文所有的代码均为shiro官网(http://shiro.apache.org/)中shiro 1.3.2版本中的源码. 追踪Subject的login(AuthenticationToken t ...

  8. snagit12个人爱好

  9. POJ 3579 median 二分搜索,中位数 难度:3

    Median Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 3866   Accepted: 1130 Descriptio ...

  10. 下拉选择框 Spinner的用法。

    代码如下: package com.lixu.xialakuang; import android.app.Activity; import android.content.Context; impo ...