BZOJ4916: 神犇和蒟蒻【杜教筛】
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.。。。
然后发现第二个其实可以表示成
\]
然后我们令
\\
g(i)=i
\]
那么可以得到
\]
又因为
\]
且
\]
所以有
\]
然后上杜教筛板子。。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll Mod = 1e9 + 7;
const ll N = 1e7 + 10;
const ll inv6 = 166666668;
const ll inv2 = 500000004;
ll prime[N], cnt = 0;
ll phi[N], sum[N], vis[N];
map<ll, ll> mp;
ll add(ll a, ll b) {
return (a += b) >= Mod ? a - Mod : a;
}
ll sub(ll a, ll b) {
return (a -= b) < 0 ? a + Mod : a;
}
ll mul(ll a, ll b) {
return a * b % Mod;
}
void get_prime() {
phi[1] = 1;
for (ll i = 2; i < N; i++) {
if (!vis[i]) {
phi[i] = i - 1;
prime[++cnt] = i;
}
for (ll j = 1; j <= cnt && i * prime[j] < N; j++) {
vis[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);
}
}
}
for (ll i = 1; i < N; i++)
sum[i] = add(sum[i - 1], mul(i, phi[i]));
}
ll solve(ll n) {
if (n < N) return sum[n];
if (mp.count(n)) return mp[n];
ll res = mul(mul(n, n + 1), mul(2 * n + 1, inv6));
for (ll i = 2; i <= n; i++) {
ll j = n / (n / i);
res = sub(res, mul(solve(n / i), mul(inv2, mul(i + j, j - i + 1))));
i = j;
}
return mp[n] = res;
}
int main() {
get_prime();
ll n; cin >> n;
cout << 1 << "\n" << solve(n);
return 0;
}
BZOJ4916: 神犇和蒟蒻【杜教筛】的更多相关文章
- BZOJ4916: 神犇和蒟蒻(杜教筛)
题意 求 $$\sum_{i = 1}^n \mu(i^2)$$ $$\sum_{i = 1}^n \phi(i^2)$$ $n \leqslant 10^9$ Sol zz的我看第一问看了10min ...
- [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} ...
- 【BZOJ4916】神犇和蒟蒻 杜教筛
题目传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=4916 第一个询问即求出$\sum_{i=1}^{n} { \mu (i^2)} $,考虑 ...
- LG4213 【模板】杜教筛(Sum)和 BZOJ4916 神犇和蒟蒻
P4213 [模板]杜教筛(Sum) 题目描述 给定一个正整数$N(N\le2^{31}-1)$ 求 $$ans_1=\sum_{i=1}^n\varphi(i)$$ $$ans_2=\sum_{i= ...
- BZOJ4916 神犇和蒟蒻 【欧拉函数 + 杜教筛】
题目 很久很久以前,有一只神犇叫yzy; 很久很久之后,有一只蒟蒻叫lty; 输入格式 请你读入一个整数N;1<=N<=1E9,A.B模1E9+7; 输出格式 请你输出一个整数A=\sum ...
- BZOJ4916 神犇和蒟蒻(欧拉函数+杜教筛)
第一问是来搞笑的.由欧拉函数的计算公式容易发现φ(i2)=iφ(i).那么可以发现φ(n2)*id(n)(此处为卷积)=Σd*φ(d)*(n/d)=nΣφ(d)=n2 .这样就有了杜教筛所要求的容易算 ...
- Bzoj4916: 神犇和蒟蒻
题面 传送门 Sol 第一问puts("1") 第二问,\(\varphi(i^2)=i\varphi(i)\) 设\(\phi(n)=\sum_{i=1}^{n}i\varphi ...
- 【BZOJ4916】神犇和蒟蒻(杜教筛)
[BZOJ4916]神犇和蒟蒻(杜教筛) 题面 BZOJ 求 \[\sum_{i=1}^n\mu(i^2)\ \ 和\ \sum_{i=1}^n\phi(i^2)\] 其中\[n<=10^9\] ...
- 【BZOJ4916】神犇和蒟蒻 解题报告
[BZOJ4916]神犇和蒟蒻 Description 很久很久以前,有一群神犇叫sk和ypl和ssr和hjh和hgr和gjs和yay和xj和zwl和dcx和lyy和dtz和hy和xfz和myh和yw ...
随机推荐
- Bate冲刺四——《WAP团队》
β冲刺第四天 1. 今日完成任务情况以及遇到的问题. ①马麒.杜有海:记录功能完善情况 ②郝明宇:记录验收情况 ③马宏伟.周欣:后台前端数据连接 ④乌勒扎:综合测试 2.成员时间贡献 成员 马宏 ...
- ubuntu 安装 openssh-server,xinetd,vmware tools
●安装SSH服务 ●判断是否安装ssh服务,通过如下命令:ps -e|grep ssh 1, sudo apt-get update --->软件的更新地址变了,需要更新本机的sources.l ...
- Vue项目骨架屏注入实践
相比于早些年前后端代码紧密耦合.后端工程师还得写前端代码的时代,如今已发展到前后端分离,这种开发方式大大提升了前后端项目的可维护性与开发效率,让前后端工程师关注于自己的主业.然而在带来便利的同时,也带 ...
- 20170706wdVBA正则表达式提取题目
Public Sub GetContents() Dim Reg As Object Dim Matches As Object Dim OneMatch As Object Dim Index As ...
- mxnet(gluon) 实现DQN简单小例子
参考文献 莫凡系列课程视频 增强学习入门之Q-Learning 关于增强学习的基本知识可以参考第二个链接,讲的挺有意思的.DQN的东西可以看第一个链接相关视频.课程中实现了Tensorflow和pyt ...
- iterator not dereferencable问题
STL中的迭代器总是出现各种问题,这个是我在打表达式求值时碰到的... 综合网上的答案,一般来说有两种情况: 第一:访问了非法位置. 一般来说可能在queue为空时取front(),rear(),或者 ...
- shiro学习笔记-Subject#login(token)实现过程
本博文所有的代码均为shiro官网(http://shiro.apache.org/)中shiro 1.3.2版本中的源码. 追踪Subject的login(AuthenticationToken t ...
- snagit12个人爱好
- POJ 3579 median 二分搜索,中位数 难度:3
Median Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 3866 Accepted: 1130 Descriptio ...
- 下拉选择框 Spinner的用法。
代码如下: package com.lixu.xialakuang; import android.app.Activity; import android.content.Context; impo ...