[BZOJ4916]神犇(Monster_Qi)和蒟蒻(SWHsz)
2024-08-25 07:27:34
很久很久以前,有一只神犇叫Monster_Qi;
很久很久之后,有一只蒟蒻叫SWHsz;
1<=N<=1E9,A、B模1E9+7;
求这个。
求μ的话直接输出1就行了因为除了1的平方外都有平方因子。
求φ的话就有个显而易见的结论就是\(φ(n^2)=φ(n)n\),列出φ的一般式就行了。
然后就是套杜教筛的模板了。
要凑 \(f \cdot g=h\)
$ h(i)=\sum _{d|i} φ(d)dg(i/d) \(
显而易见的,g是\)id\(函数,\)h(i)=i^2$
然后随便搞了。
#include <iostream>
#include <cstdio>
#include <map>
using namespace std;
map<long long,long long>mp;
long long n;
const int N = 10000005,NI2=500000004,NI6=166666668,mod=1e9+7;
long long ph[N],prime[N],cnt;
bool vis[N];
void phhh() {
ph[1]=1;
for(int i=2; i<=N-5; i++) {
if(!vis[i]) prime[++cnt]=i,ph[i]=i-1;
for(int j=1; j<=cnt; j++) {
if(i*prime[j]<=N-5) vis[i*prime[j]]=1;else break;
if(i%prime[j]==0){ph[i*prime[j]]=ph[i]*prime[j];break;}
else ph[i*prime[j]]=ph[i]*ph[prime[j]];
}
}
for(int i=1;i<=N-5;i++) ph[i]=(ph[i]*i+ph[i-1])%mod;
}
long long solve(long long x) {
if(N-5>=x) return ph[x];
if(mp.count(x)) return mp[x];
long long ans=x*((x+1)%mod)%mod*((2*x%mod+1)%mod)%mod*NI6%mod;
for(long long i=2,nxti;i<=x;i=nxti+1) {
nxti=x/(x/i);
ans=(ans-(nxti+i)%mod*(nxti-i+1ll)%mod*NI2%mod*solve(x/i))%mod;
}
return mp[x]=(ans+mod)%mod;
}
int main() {
phhh();
scanf("%lld",&n);
printf("1\n%lld",solve(n));
}
最新文章
- IO多路复用之epoll总结
- 【Cocos2d-x 3.x】 场景切换生命周期、背景音乐播放和场景切换原理与源码分析
- C# 字符串转义和反转义
- iOS中plist的创建,数据写入与读取
- iOS - Swift Struct 结构体
- 2 TKinter绑定事件
- Codeforces Gym 100463E Spies 并查集
- 基于jQuery的宽屏可左右切换的焦点图插件
- jQuery plugin : jqTransform
- 【python之路6】pycharm的使用
- MSDN官方数据库开发群
- JMeter集合点
- 证书,CSP与Openssl
- SVN使用方法
- Linux中的configure,make,make install到底在做些什么
- 安装yii2 需要token 记录
- JavaScript 概述
- CentOS7.x系统中使用Docker时,在存储方面需要注意的问题
- Spring Boot + Spring Cloud 实现权限管理系统 (系统服务监控)
- (转).net反编译工具JustDecompile