[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}^n\mu(i^2)\)
直接输出1
因为对于\(\forall i>1\)有\(\mu (i^2)=0\)
2.\(\sum_{i=1}^n\varphi(i^2)\)
for 杜教筛:
构造函数\(f(i)=\varphi(i^2)\),则有\(f*\mathrm{id}=id^2\),具体推导:
\(\sum_{d|n}\varphi(d^2)\frac n d=\sum_{d|n}d\varphi(d)\frac n d=n\sum_{d|n}d=n^2\)
杜教板子:(风格不太清真,好久以前写的)
#include <bits/stdc++.h>
#define maxn 3000010
#define p 1000000007
#define int long long
using namespace std;
map<int, long long> ans_phi;
bool vis[maxn];
int prime[maxn], tot;
long long phi[maxn];
long long inv2, inv6;
long long qpow(long long a, long long b)
{
long long res = 1;
while (b > 0)
{
if (b & 1)
res = res * a % p;
a = a * a % p;
b >>= 1;
}
return res;
}
void prework()
{
inv2 = qpow(2, p - 2);
inv6 = qpow(6, p - 2);
phi[1] = 1;
for (int i = 2; i <= 3000000; i++)
{
if (vis[i] == 0)
{
prime[++tot] = i;
phi[i] = i - 1;
}
for (int j = 1; j <= tot && prime[j] * i <= 3000000; j++)
{
vis[i * prime[j]] = 1;
if (i % prime[j] == 0)
{
phi[i * prime[j]] = phi[i] * prime[j] % p;
break;
}
else
phi[i * prime[j]] = phi[i] * (prime[j] - 1) % p;
}
phi[i] = i * phi[i] % p;
(phi[i] += phi[i - 1]) %= p;
}
}
long long S_phi(int n)
{
if (n <= 3000000)
return phi[n];
if (ans_phi.count(n))
return ans_phi[n];
long long ans = 1LL * (2 * n + 1) * (n + 1) % p * n % p * inv6 % p;
for (int l = 2, r; l <= n; l = r + 1)
{
r= n / (n / l);
ans = ((ans - (r - l + 1) * (l + r) % p * S_phi(n / l) % p * inv2 % p) % p + p) % p;
}
return ans_phi[n] = ans;
}
void read(int &x)
{
static char ch;
x = 0;
ch = getchar();
while (!isdigit(ch))
ch = getchar();
while (isdigit(ch))
{
x = x * 10 + ch - 48;
ch = getchar();
}
}
signed main()
{
prework();
// int T;
// read(T);
// for (int n, i = 1; i <= T; i++)
// {
int n;
read(n);
printf("1\n%lld\n", S_phi(n));
// }
return 0;
}
for Min_25筛:
\(f(p)=\varphi(p^2)=p\varphi(p)=p^2-p\)
对于质数我们需要筛一个g2,一个g1,方便判断质数最好再筛一个g0
快速计算\(f(p^k)\)部分也可以参考Sum的Min_25筛写法
这题可以。。。写Min_25筛 后天再写
[BZOJ4916]神犇和蒟蒻 杜教筛/Min_25筛的更多相关文章
- BZOJ4916: 神犇和蒟蒻(杜教筛)
题意 求 $$\sum_{i = 1}^n \mu(i^2)$$ $$\sum_{i = 1}^n \phi(i^2)$$ $n \leqslant 10^9$ Sol zz的我看第一问看了10min ...
- 【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: 神犇和蒟蒻【杜教筛】
Description 很久很久以前,有一只神犇叫yzy; 很久很久之后,有一只蒟蒻叫lty; Input 请你读入一个整数N;1<=N<=1E9,A.B模1E9+7; Output 请你 ...
- 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 ...
随机推荐
- 数据校验(3)--demo2---bai
input_user.jsp <%@ page language="java" import="java.util.*" pageEncoding=&qu ...
- vs中ffmpeg release版本崩溃问题(转)
vs2010 win7 下开发视频服务器,用到ffmpeg,debug版本运行正常,切换到release时,出现"0x00905a4d 处未处理的异常: 0xC0000005: 读取位置 0 ...
- C#高级参数params的使用
params,可变参数,使用十分简单,看代码吧. using System; using System.Collections.Generic; using System.Linq; using Sy ...
- 安卓读取SD卡的容量
在开发中,我们经常会用到SD卡,那么在对SD卡进行读写的时候,我们经常需要判断SD卡的剩余容量是否足够.因此,这次我们来写写获取SD卡容量的程序. 该注意的地方,我都在程序里面有注明了.看程序基本就懂 ...
- 【260】centos设置root密码
怎么进Linux单用户模式 http://tieba.baidu.com/p/2216642385 http://jingyan.baidu.com/article/c1a3101ea68dafde6 ...
- Android WebView 捕捉点击的URL中的信息
项目要求,在WebView中点击搜索关键字,加载其他Web页面时,需要在一个文本输入框中,实时显示关键字 事实上,这种点击,是WebView内的,并没有跳出这个WebView,Activity也没有经 ...
- C++——const
参考:https://www.cnblogs.com/Forever-Kenlen-Ja/p/3776991.html ; //修饰变量,a不能该内容(更改为其他的值) int* const p = ...
- js实现无刷新上传
在新增数据项的时候,用ajax实现无刷新提交,但上传文件的时候,由于数据类型原因,不能将页面的<asp:FileUpload>中以字符串值的方式传到js里调用.我一共找到了两个方法予以解决 ...
- Entity Framework Tutorial Basics(30):
CRUD using Stored Procedure: In the previous chapter, we have seen how to get data using a stored pr ...
- 导入project后lib文件夹一直没有jar包
原因: 导入project,倒错了项目,只因为后面新建的项目名称有和前面的差不多,导致自己选择了原来的项目,因此,项目的注解一直报错.