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$。

第二问,先给个结论:$\varphi (n^{2})=n\varphi (n)$,于是我们要求$F(n)=\sum_{i=1}^{n}i\varphi (i)$。

设$f(n)=n\varphi (n)$,考虑$f$与$id$函数的狄利克雷卷积,$id*f(n)=\sum_{d|n}id(d)f(\frac{n}{d})$

$id*f(n)=n\sum_{d|n}\varphi (\frac{n}{d})=n^{2}$,那么$\sum_{i=1}^{n}id*f(i)=\frac{n(n+1)(2n+1)}{6}$

又$\sum_{i=1}^{n}id*f(i)=\sum_{i=1}^{n}\sum_{d|n}id(d)f(\frac{n}{d})=\sum_{ij\leq n}id(i)f(j)=\sum_{i=1}^{n}id(i)F(\left \lfloor \frac{n}{i} \right \rfloor)$

于是$F(n)=id(1)F(n)=\sum_{i=1}^{n}id*f(i)-\sum_{i=2}^{n}id(i)F(\left \lfloor \frac{n}{i} \right \rfloor)=\frac{n(n+1)(2n+1)}{6}-\sum_{i=2}^{n}id(i)F(\left \lfloor \frac{n}{i} \right \rfloor)$

然后直接用杜教筛的套路:数论分块+记忆化搜索就行了。

 1 //It is made by wfj_2048~
 2 #include <algorithm>
 3 #include <iostream>
 4 #include <cstring>
 5 #include <cstdlib>
 6 #include <cstdio>
 7 #include <vector>
 8 #include <cmath>
 9 #include <queue>
10 #include <stack>
11 #include <map>
12 #include <set>
13 #define rhl (1000000007)
14 #define N (3000010)
15 #define inf (1<<30)
16 #define il inline
17 #define RG register
18 #define ll long long
19 #define File(s) freopen(s".in","r",stdin),freopen(s".out","w",stdout)
20
21 using namespace std;
22
23 int vis[N],phi[N],prime[N],n,maxn,cnt;
24 ll f[N],In2,In6;
25
26 map <ll,ll> F,vi;
27
28 il int gi(){
29     RG int x=0,q=1; RG char ch=getchar();
30     while ((ch<‘0‘ || ch>‘9‘) && ch!=‘-‘) ch=getchar();
31     if (ch==‘-‘) q=-1,ch=getchar();
32     while (ch>=‘0‘ && ch<=‘9‘) x=x*10+ch-48,ch=getchar();
33     return q*x;
34 }
35
36 il ll qpow(RG ll a,RG ll b){
37     RG ll ans=1;
38     while (b){
39     if (b&1) ans=ans*a%rhl;
40     a=a*a%rhl,b>>=1;
41     }
42     return ans;
43 }
44
45 il void sieve(){
46     phi[1]=f[1]=1;
47     for (RG int i=2;i<=maxn;++i){
48     if (!vis[i]) prime[++cnt]=i,phi[i]=i-1;
49     for (RG int j=1,k;j<=cnt;++j){
50         k=i*prime[j]; if (k>maxn) break; vis[k]=1;
51         if (i%prime[j]) phi[k]=phi[i]*phi[prime[j]];
52         else{ phi[k]=phi[i]*prime[j]; break; }
53     }
54     }
55     for (RG int i=2;i<=maxn;++i) f[i]=(f[i-1]+(ll)i*(ll)phi[i])%rhl; return;
56 }
57
58 il ll du(RG ll n){
59     if (n<=maxn) return f[n]; if (vi[n]) return F[n];
60     RG ll ans=n*(n+1)%rhl*(2*n+1)%rhl*In6%rhl,pos; vi[n]=1;
61     for (RG ll i=2;i<=n;i=pos+1){
62     pos=n/(n/i);
63     ans-=(i+pos)*(pos-i+1)%rhl*du(n/i)%rhl*In2%rhl;
64     if (ans<0) ans+=rhl;
65     }
66     return F[n]=ans;
67 }
68
69 il void work(){
70     n=gi(),puts("1"),maxn=min(3000000,n),sieve();
71     In2=qpow(2,rhl-2),In6=qpow(6,rhl-2);
72     printf("%lld\n",du(n)); return;
73 }
74
75 int main(){
76     File("phi");
77     work();
78     return 0;
79 }
时间: 2024-12-09 17:44:41

bzoj4916 神犇和蒟蒻的相关文章

[bzoj4916] 神犇和蒟蒻 [杜教筛]

题面: 传送门 一句话,就是让你求$\mu\left(i^2\right)$以及$\varphi\left(i^2\right)$的前缀和 思路: 第一问,瞪了一会儿恍然大悟:这不就是1吗...... 因为对于$\mu\left(i^2\right)$,$i^2=i\ast i$,那么$\mu\left(i^2\right)$在$i\neq1$的时候值都是0 所以第一问输出1就好了...... 接下来看第二问 这一问中解决$\varphi\left(i^2\right)$是关键,因为这东西是个积

【BZOJ4916】神犇和蒟蒻 杜教筛

[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?(废话),然后 设j=i/d,

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

[BZOJ4916]神犇和蒟蒻(杜教筛) 题面 BZOJ 求 \[\sum_{i=1}^n\mu(i^2)\ \ 和\ \sum_{i=1}^n\phi(i^2)\] 其中\[n<=10^9\] 题解 第一问 搞笑的 不会做? 算了.. 还是说一下: 想想\(\mu(x)\)是怎么算的??? 既然是\(i^2\),每个因数的个数一定不会是\(1\) 所以除了\(\mu(1)\)外一定都是\(0\) 所以第一问的答案一定是\(1\) 第二问: 先看看要求的是什么 \(\phi(i^2)=i*\ph

bzoj 4916 神犇和蒟蒻 杜教筛

第一题结合莫比乌斯函数定义,值恒为1. 第二题,phi(i^2) = phi(i) * i,根据欧拉函数的定义式能推出来,每个质因子的指数都增加一倍,都提出来一份,就是原先的phi(i)*i.然后还是跟g(x)卷一下,杜教筛即可. 1 #include <cstdio> 2 #include <map> 3 #include <cmath> 4 using namespace std; 5 typedef long long ll; 6 const int MAXN =

P2456 - 膜拜神犇

P2456 - 膜拜神犇 Description 有一个 n 个点 m 条边的有向图, 蒟蒻可以从 1 号点出发在图上走, 并且最终需要回到 1 号点. 每个点都有一个神犇( 包括 1 号点), 每次经过一个没到过的点, 蒟蒻都会膜拜那位 神犇. 蒟蒻希望膜拜尽可能多的神犇. 由于蒟蒻膜拜神犇的欲望非常强烈, 所以他可以有一次机会逆着一条有向边的方向走. ( 需要注意的是, 这条边的方向不会改变). 你现在想知道, 蒟蒻最多能膜拜多少神犇? Input 第一行 2 个整数 n. m, 分别表示图

DP——由蒟蒻到神犇的进阶之路

问:为什么开dp专题? 答:我太蒟蒻了 问:你个辣鸡,衡八的那个陈老师不知道比你强到哪里去了,你们这些年轻人,拿衣服! 答:--------------------------------------------------------------[我是辣鸡,只能膜陈老师] 一.Hzwer博客中的树形DP集合[待更]

论蒟蒻的自我修养

作为一个蒟蒻,离开大神还有很大一段距离(更不用说神犇了).作为一个想成为SB的SX,自我修养是及其重要的.即使初三老师丧心病狂,也不能放弃这条路恩! 计划: 恩不去MO但是学习他们的那些书~~毕竟数学渣 = ^ = 然后是数据结构...我最弱的一块辣 然后是算法...我也不强 解题思路 啊啊啊!!!差得要命!!! 写程序 啊啊啊!!要死辣!! 所以要多写多练撒!! 要开始刷题了撒!! BZOJ的题目都不会啊!!要死了撒! 估计学一下MO还是有好处的..至少OI MO不分家~~MO主要是数论和排列

cogs 1656. 膜拜神犇

1656. 膜拜神犇 ★☆   输入文件:trioxorz.in   输出文件:trioxorz.out   简单对比时间限制:0.5 s   内存限制:128 MB [题目描述] bigmingod 是F.M.S信息组的组草,同时也是万人膜拜的神犇,整个年级暗恋他的女生不计其数,这让机房里的三只蒟蒻QYHDS,LZK,OIdiot羡慕嫉妒恨.为了获得像bigmingod一样的成就,这三只蒟蒻决定每次竞赛课前对他进行膜拜--三个人构成一个三角形,将bigmingod包围在内部(不包括边上),称为

博主自传——蒟蒻的OI之路

博主来自河北石家庄市第二中学,现在读高二,主攻信息学竞赛(其实并没有学习其他学科竞赛). NOIP中人品大爆发,使劲挤进河北省一等奖队伍,侥幸留在竞赛团队中(差点就淘汰出局啦). 关于我的ID,YOUSIKI,就是那四个平假名,没有什么实际意义.若搜到日本某艺人,和我无关. NOIP前主要活跃在PekingUniversityOnlineJudge(不知道拼错木有),现在主要活跃在Lydsy(小伙伴们都叫他BZOJ). 在各个OJ上基本都有号(有大号也有小号),ID都是YOUSIKI.Tyvj,