Loj#6053-简单的函数【Min25筛】
正题
题目大意
定义一个积性函数\(f(p^c)=p\ xor\ c\),求\(\sum_{i=1}^nf(i)\)
解题思路
异或这个东西不太好搞,要考虑怎么求出\(g\)数组。
当\(p\)为质数时\(f(p)=p-1\),所以我们让\(g(n)=\sum_{i=1}^n[i\in Pri](i-1)\)就好了。
然后因为\(i-1\)不是完全积性函数,所以拆成\(i\)和\(1\)分开来就好了。
然后因为\(f(2)=3\),所以答案会少\(2\),加回去就好了。
code
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define ll long long
using namespace std;
const ll N=1e6+10,P=1e9+7;
ll n,T,cnt,tot,w[N],pri[N],sp[N],g1[N],g2[N],ind1[N],ind2[N];
bool v[N];
void init(ll n){
for(ll i=2;i<=n;i++){
if(!v[i]){
pri[++cnt]=i;
sp[cnt]=sp[cnt-1]+i;
}
for(ll j=1;j<=cnt&&i*pri[j]<=n;j++){
v[i*pri[j]]=1;
if(i%pri[j]==0)break;
}
}
return;
}
ll S(ll x,ll y){
if(pri[y]>=x)return 0;
ll pos=(x>T)?ind2[n/x]:ind1[x];
ll ans=((g2[pos]-g1[pos])-(sp[y]-y)+P)%P;
if(y==0)ans+=2;
for(ll k=y+1;k<=cnt&&pri[k]*pri[k]<=x;k++)
for(ll e=1,p=pri[k];p<=x;p=p*pri[k],e++)
(ans+=(pri[k]^e)*(S(x/p,k)+(e!=1))%P)%=P;
return ans;
}
signed main()
{
scanf("%lld",&n);
if(n==1)return puts("1")&0;
T=sqrt(n);init(T);
for(ll l=1,r;l<=n;l=r+1){
ll x=n/l;r=n/(n/l);
w[++tot]=x;x%=P;
g1[tot]=x-1;
g2[tot]=x*(x+1)/2%P-1;
if(n/l<=T)ind1[n/l]=tot;
else ind2[n/(n/l)]=tot;
}
for(ll i=1;i<=cnt;i++)
for(ll j=1;j<=tot&&pri[i]*pri[i]<=w[j];j++){
ll k=w[j]/pri[i];k=(k>T)?ind2[n/k]:ind1[k];
(g2[j]+=P-(g2[k]-sp[i-1])*pri[i]%P)%=P;
(g1[j]+=P-(g1[k]-i+1)%P)%=P;
}
printf("%lld\n",S(n,0)+1);
return 0;
}
Loj#6053-简单的函数【Min25筛】的更多相关文章
- LOJ 6053 简单的函数——min_25筛
题目:https://loj.ac/problem/6053 min_25筛:https://www.cnblogs.com/cjyyb/p/9185093.html 这里把计算 s( n , j ) ...
- loj 6053 简单的函数 —— min_25筛
题目:https://loj.ac/problem/6053 参考博客:http://www.cnblogs.com/zhoushuyu/p/9187319.html 算 id 也可以不存下来,因为 ...
- LOJ.6053.简单的函数(Min_25筛)
题目链接 Min_25筛见这里: https://www.cnblogs.com/cjyyb/p/9185093.html https://www.cnblogs.com/zhoushuyu/p/91 ...
- loj#6053. 简单的函数(Min_25筛)
传送门 题解 \(Min\_25\)筛有毒啊--肝了一个下午才看懂是个什么东西-- \(zsy\)巨巨强无敌-- //minamoto #include<bits/stdc++.h> #d ...
- LOJ #6053. 简单的函数
$Min$_$25$筛模版题 为什么泥萌常数都那么小啊$ QAQ$ 传送门:Here 题意: $ f(1)=1$$ f(p^c)=p⊕c(p 为质数,⊕ 表示异或)$$ f(ab)=f(a)f(b)( ...
- 简单的函数——Min_25筛
%%yyb %%zsy 就是实现一下Min-25筛 筛积性函数的操作 首先要得到 $G(M,j)=\sum_{t=j}^{cnt} \sum_{e=1}^{p_t^{e+1}<=M} [\phi ...
- loj#6235. 区间素数个数(min25筛)
题意 题目链接 Sol min25筛的板子题,直接筛出\(g(N, \infty)\)即可 筛的时候有很多trick,比如只存\(\frac{N}{x}\)的值,第二维可以滚动数组滚动掉 #inclu ...
- min25筛学习总结
前言 杜教筛学了,顺便把min25筛也学了吧= =刚好多校也有一道题需要补. 下面推荐几篇博客,我之后写一点自己的理解就是了. 传送门1 传送门2 传送门3 这几篇写得都还是挺好的,接下来我就写下自己 ...
- [学习笔记]Min-25筛
%%yyb %%zsy 一. 基本操作:筛1~N中的素数个数.n=1e9 设F(M,j)表示,2~M的所有数中,满足以下条件之一的数的个数:①x是质数②x最小质因子大于(注意是大于没有等号)$P_j$ ...
- 莫比乌斯反演/线性筛/积性函数/杜教筛/min25筛 学习笔记
最近重新系统地学了下这几个知识点,以前没发现他们的联系,这次总结一下. 莫比乌斯反演入门:https://blog.csdn.net/litble/article/details/72804050 线 ...
随机推荐
- js 遍历数组对象求和
这个通常是求多个商品的总价遇到的情形: [ 0: {id: 1, name: "服务费", price: "1.00"} 1: {id: 2, name: &q ...
- qt work
auto folder1="./.mm"; QDir *folder = new QDir; bool exist = folder->exists(folder1); if ...
- WPF---数据绑定之PasswordBox绑定(八)
一.概述 众所周知,绑定的源既可以是依赖属性也可以是普通的CLR属性,而绑定的目标只能是依赖属性. 控件PasswordBox的Password属性不是依赖属性,不可以作为绑定的目标与后台数据进行绑定 ...
- 【转】java内存溢出的场景及解决办法
参考: https://blog.csdn.net/qq_32671287/article/details/86063396 https://www.cnblogs.com/snowwhite/p/9 ...
- 关于 java编程思想第五版 《On Java 8》
On Java 8中文版 英雄召集令 这是该项目的GITHUB地址:https://github.com/LingCoder/OnJava8 广招天下英雄,为开源奉献!让我们一起来完成这本书的翻译吧! ...
- Linux命令集锦之·字符截取命令
时间:2018-11-15 记录:byzqy 字符截取命令: cut.printf.awk.sed cut $ cut [选项] 文件名 选项: -f 列号:提取第几列: -d 分隔符:按照指定分隔符 ...
- Docker下制作一个容器镜像
操作过程描述: (1)先基于centos的镜像启动一个centos容器 (2)在这个容器中安装nginx (3)然后把这个已经安装了nginx的容器制作成一个docker的镜像 操作:docker c ...
- CUDA 矩阵乘法终极优化指南
作者:马骏 | 旷视 MegEngine 架构师 前言 单精度矩阵乘法(SGEMM)几乎是每一位学习 CUDA 的同学绕不开的案例,这个经典的计算密集型案例可以很好地展示 GPU 编程中常用的优化技巧 ...
- Java-SpringBoot整合SpringCloud
SpringBoot整合SpringCloud 1. SpringCloud特点 SpringCloud专注于为典型的用例和扩展机制提供良好的开箱即用体验,以涵盖其他情况: 分布式/版本化配置 服务注 ...
- 【第四篇】-Git 工作区、暂存区和版本库之Spring Cloud直播商城 b2b2c电子商务技术总结
Git 工作区.暂存区和版本库 基本概念 我们先来理解下 Git 工作区.暂存区和版本库概念: 工作区:就是你在电脑里能看到的目录. 暂存区:英文叫 stage 或 index.一般存放在 .git ...