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

题解

首先注意到 $A$ 直接输出 $1$ 得满分。因为只有 $\mu(1^2)=1$ 。至于为什么,想想莫比乌斯函数是什么。

对于第二问容易发现 $\varphi(i^2)=i\cdot\varphi(i)$ 。至于为什么,想想你是怎么线性筛欧拉函数的。

对于函数 $f(i)=i\cdot\varphi(i)$ 容易发现,这也是个积性函数。我们可以将阈值内的线性筛筛出来。对于阈值外的,考虑杜教筛。

求 $S(n)=\sum\limits_{i=1}^nf(i)$

上述式子 $$g(1)S(n)=\sum_{i=1}^n(g*f)(i)-\sum_{i=2}^ng(i)S\left(\left\lfloor\frac{n}{i}\right\rfloor\right)$$

考虑到 $\sum\limits_{d\mid n}\varphi(d)=n$ ,又由于 $(g*f)(n)=\sum\limits_{d\mid n}\varphi(d)d\cdot g\left(\frac{n}{d}\right)$ 。我们考虑让 $g(n)=id(n)$ ,那么 $(id*f)(n)=\sum\limits_{d\mid n}n\cdot\varphi(d)=n^2$ 。由于 $\sum\limits_{i=1}^ni^2=\frac{n(n+1)(2n+1)}{6}$ 。显然这个卷积的前缀为 $\sum\limits_{i=1}^n(g*f)(i)=\frac{n(n+1)(2n+1)}{6}$ 。

故对于 $f$ $$S(n)=\frac{n(n+1)(2n+1)}{6}-\sum_{i=2}^ni\cdot S\left(\left\lfloor\frac{n}{i}\right\rfloor\right)$$

 //It is made by Awson on 2018.1.24
#include <set>
#include <map>
#include <cmath>
#include <ctime>
#include <queue>
#include <stack>
#include <cstdio>
#include <string>
#include <vector>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
#define LL long long
#define Abs(a) ((a) < 0 ? (-(a)) : (a))
#define Max(a, b) ((a) > (b) ? (a) : (b))
#define Min(a, b) ((a) < (b) ? (a) : (b))
#define Swap(a, b) ((a) ^= (b), (b) ^= (a), (a) ^= (b))
#define writeln(x) (write(x), putchar('\n'))
#define lowbit(x) ((x)&(-(x)))
using namespace std;
const int MOD = 1e9+;
const int N = ;
void read(int &x) {
char ch; bool flag = ;
for (ch = getchar(); !isdigit(ch) && ((flag |= (ch == '-')) || ); ch = getchar());
for (x = ; isdigit(ch); x = (x<<)+(x<<)+ch-, ch = getchar());
x *= -*flag;
}
void write(int x) {
if (x > ) write(x/);
putchar(x%+);
} int n, inv2, inv6, f[N+];
int prime[N+], isprime[N+], tot;
map<int, int>mp; int quick_pow(int a, int b) {
int ans = ;
while (b) {
if (b&) ans = 1ll*ans*a%MOD;
a = 1ll*a*a%MOD, b >>= ;
}
return ans;
}
void get_f() {
memset(isprime, , sizeof(isprime)); isprime[] = , f[] = ;
for (int i = ; i <= N; i++) {
if (isprime[i]) prime[++tot] = i, f[i] = 1ll*i*(i-)%MOD;
for (int j = ; j <= tot && i*prime[j] <= N; j++) {
isprime[i*prime[j]] = ;
if (i%prime[j]) f[i*prime[j]] = 1ll*f[i]*(prime[j]-)%MOD*prime[j]%MOD;
else {f[i*prime[j]] = 1ll*f[i]*prime[j]%MOD*prime[j]%MOD; break; }
}
(f[i] += f[i-]) %= MOD;
}
}
int cal(int x) {
if (x <= N) return f[x];
if (mp.count(x)) return mp[x];
int ans = 1ll*x*(x+)%MOD*(*x+)%MOD*inv6%MOD;
for (int i = , last; i <= x; i = last+) {
last = x/(x/i); (ans -= 1ll*(last+i)*(last-i+)%MOD*inv2%MOD*cal(x/i)%MOD) %= MOD;
}
return mp[x] = ans;
}
void work() {
get_f(); inv2 = quick_pow(, MOD-), inv6 = quick_pow(, MOD-); read(n);
writeln(); writeln((cal(n)+MOD)%MOD);
}
int main() {
work();
return ;
}

[BZOJ 4916]神犇和蒟蒻的更多相关文章

  1. 【刷题】BZOJ 4916 神犇和蒟蒻

    Description 很久很久以前,有一只神犇叫yzy; 很久很久之后,有一只蒟蒻叫lty; Input 请你读入一个整数N;1<=N<=1E9,A.B模1E9+7; Output 请你 ...

  2. bzoj 4916: 神犇和蒟蒻 (杜教筛+莫比乌斯反演)

    题目大意: 读入n. 第一行输出“1”(不带引号). 第二行输出$\sum_{i=1}^n i\phi(i)$. 题解: 所以说那个$\sum\mu$是在开玩笑么=.= 设$f(n)=n\phi(n) ...

  3. bzoj 4916: 神犇和蒟蒻【欧拉函数+莫比乌斯函数+杜教筛】

    居然扒到了学长出的题 和3944差不多(?),虽然一眼看上去很可怕但是仔细观察发现,对于mu来讲,答案永远是1(对于带平方的,mu值为0,1除外),然后根据欧拉筛的原理,\( \sum_{i=1}^{ ...

  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】神犇和蒟蒻(杜教筛)

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

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

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

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

    Description 很久很久以前,有一只神犇叫yzy; 很久很久之后,有一只蒟蒻叫lty; Input 请你读入一个整数N;1<=N<=1E9,A.B模1E9+7; Output 请你 ...

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

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

  9. 【BZOJ4916】神犇与蒟蒻

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

随机推荐

  1. LeetCode-391. 完美矩形(使用C语言编译,详解)

    链接:https://leetcode-cn.com/problems/perfect-rectangle/description/ 题目 我们有 N 个与坐标轴对齐的矩形, 其中 N > 0, ...

  2. hadoop集群简单搭建

    分布式搭建 在ubuntu下创建hadoop用户组和用户 bigdata@master:~$sudo addgroup hadoop bigdata@master:~$sudo adduser --i ...

  3. fs 创建文件夹

    var http = require("http"); var fs = require("fs"); var server = http.createServ ...

  4. verilog学习笔记(2)_一个小module及其tb

    module-ex_cnt module ex_cnt( input wire sclk, input wire rst_n, output wire[9:0] cnt ); reg [9:0] cn ...

  5. listview 与 button 焦点 在item添加下列属性

    android:descendantFocusability="blocksDescendants" http://zhaojianping.blog.51cto.com/7251 ...

  6. java 1.7新特性

    try( ... ){ ... } catch(xxx e){ ... } java1.7特性,叫做try-with-resource,实现了AutoCloseable接口的实例可以放在try(... ...

  7. 静态链表C语言数据结构

    静态链表就是将数组实现单链表: int Malloc_SLL(StaticLinkList space) { int i = space[0].cur;//取得第一个头节点的下标 if( space[ ...

  8. php的控制器链

    控制器之间协同工作就形成了控制器链· 比如在一个控制器的方法中,创建另外一个·控制器,创建对象,然后调用第二个控制器方法,那么在第一个控制器分配给视图的变量,在 第二个控制器的方法中对应的视图也是可以 ...

  9. LeetCode & Q35-Search Insert Position-Easy

    Array Binary Search Description: Given a sorted array and a target value, return the index if the ta ...

  10. Web Api 过滤器之 ExceptionFilter 异常过滤器

    一.服务器出现异常,会统一向客户端返回 500 的错误. [RoutePrefix("api/test")] public class TestController : ApiCo ...