这里(加了密码)。虽然写的可能还算清楚,但还是不公开了吧 QwQ。

真的想看的 私信可能会考虑给密码 qwq。就放个板子:

//LOJ 6053 简单的函数 f(p^c)=p xor c
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e6+5,mod=1e9+7;
int n,s,tot,val[N],id1[N],id2[N],x,cnt,p[N],sum[N],g[N],h[N],inv2=500000004;
bool vis[N];
int id(int x){
return x<=s?id1[x]:id2[n/x];
}
int S(int x,int y){
if(x<=1||p[y]>x) return 0;
int ans=((g[id(x)]-h[id(x)]-(sum[y-1]-(y-1)))%mod+mod)%mod;
if(y==1) ans+=2;
for(int i=y;i<=cnt&&p[i]*p[i]<=x;i++){
int p1=p[i],p2=p[i]*p[i];
for(int e=1;p2<=x;e++,p1=p2,p2*=p[i])
ans=(ans+((p[i]^e)*S(x/p1,i+1)%mod+(p[i]^(e+1))%mod)%mod)%mod;
}
return ans;
}
signed main(){
scanf("%lld",&n),s=sqrt(n);
vis[0]=vis[1]=1;
for(int i=2;i<=s;i++){
if(!vis[i]) p[++cnt]=i,sum[cnt]=(sum[cnt-1]+i)%mod;
for(int j=1;j<=cnt&&i*p[j]<=s;j++){
vis[i*p[j]]=1;
if(i%p[j]==0) break;
}
}
for(int l=1,r=0;l<=n;l=r+1){
r=n/(n/l),x=n/l,val[++tot]=x;
if(x<=s) id1[x]=tot;
else id2[n/x]=tot;
x%=mod,g[tot]=(2+x)*(x-1)%mod*inv2%mod,h[tot]=(x-1)%mod;
}
for(int j=1;j<=cnt;j++)
for(int i=1;i<=tot&&p[j]*p[j]<=val[i];i++){
g[i]=(g[i]-p[j]*(g[id(val[i]/p[j])]-sum[j-1])%mod+mod)%mod;
h[i]=(h[i]-(h[id(val[i]/p[j])]-(j-1))%mod+mod)%mod;
}
printf("%lld\n",S(n,1)+1);
return 0;
}

「算法笔记」Min_25 筛的更多相关文章

  1. 「学习笔记」min_25筛

    前置姿势 魔力筛 其实不看也没关系 用途和限制 在\(\mathrm{O}(\frac{n^{0.75}}{\log n})\)的时间内求出一个积性函数的前缀和. 所求的函数\(\mathbf f(x ...

  2. 「学习笔记」Min25筛

    「学习笔记」Min25筛 前言 周指导今天模拟赛五分钟秒第一题,十分钟说第二题是 \(\text{Min25}​\) 筛板子题,要不是第三题出题人数据范围给错了,周指导十五分钟就 \(\text{AK ...

  3. 「算法笔记」快速数论变换(NTT)

    一.简介 前置知识:多项式乘法与 FFT. FFT 涉及大量 double 类型数据操作和 \(\sin,\cos\) 运算,会产生误差.快速数论变换(Number Theoretic Transfo ...

  4. 「算法笔记」树形 DP

    一.树形 DP 基础 又是一篇鸽了好久的文章--以下面这道题为例,介绍一下树形 DP 的一般过程. POJ 2342 Anniversary party 题目大意:有一家公司要举行一个聚会,一共有 \ ...

  5. 「算法笔记」2-SAT 问题

    一.定义 k-SAT(Satisfiability)问题的形式如下: 有 \(n\) 个 01 变量 \(x_1,x_2,\cdots,x_n\),另有 \(m\) 个变量取值需要满足的限制. 每个限 ...

  6. 「算法笔记」Polya 定理

    一.前置概念 接下来的这些定义摘自 置换群 - OI Wiki. 1. 群 若集合 \(s\neq \varnothing\) 和 \(S\) 上的运算 \(\cdot\) 构成的代数结构 \((S, ...

  7. 「算法笔记」状压 DP

    一.关于状压 dp 为了规避不确定性,我们将需要枚举的东西放入状态.当不确定性太多的时候,我们就需要将它们压进较少的维数内. 常见的状态: 天生二进制(开关.选与不选.是否出现--) 爆搜出状态,给它 ...

  8. 「算法笔记」旋转 Treap

    一.引入 随机数据中,BST 一次操作的期望复杂度为 \(\mathcal{O}(\log n)\). 然而,BST 很容易退化,例如在 BST 中一次插入一个有序序列,将会得到一条链,平均每次操作的 ...

  9. 「算法笔记」FHQ-Treap

    右转→https://www.cnblogs.com/mytqwqq/p/15057231.html 下面放个板子 (禁止莱莱白嫖板子) P3369 [模板]普通平衡树 #include<bit ...

随机推荐

  1. Qemu/kvm虚拟化源码解析学习视频资料

    地址链接:tao宝搜索:Linux云计算KVM Qemu虚拟化视频源码讲解+实践​https://item.taobao.com/item.htm?ft=t&id=646300730262 L ...

  2. Shell脚本字符串截取方法总结

    Shell脚本8种字符串截取方法总结转自:https://www.cnblogs.com/ralphdc/p/8032335.html Linux 的字符串截取很有用.有八种方法.假设有变量 var= ...

  3. MyBatis Collection小记—— 关联查询、递归查询、多字段关联

    经常会用到mybatis的Collection标签来做级联查询或递归查询,现通过一个伪例来简单的说明一下使用中的关键点: 首先先列出三个表,给出一个场景: 1,角色表 t_role( id,name ...

  4. Linux学习 - 系统命令sudo权限

    1 功能 root把超级用执行的命令赋予普通用户执行 2 使用 visudo 或 vim /etc/sudoers 说明: root 用户名 ALL=(ALL) 被管理主机的地址=(可使用的身份) A ...

  5. lambda表达式快速创建

    Java 8十个lambda表达式案例 1. 实现Runnable线程案例 使用() -> {} 替代匿名类: //Before Java 8: new Thread(new Runnable( ...

  6. centos7 docker 修改Nginx文件

    1.docker 安装 nginx : docker安装Nginx还是很简单的,可以参考百度文章 ,或者参照docker安装mysql :https://www.cnblogs.com/jonrain ...

  7. PL/SQL实例1

    declare --定义游标    cursor cemp is select to_char(hiredate,'yyyy') from emp;    phiredate varchar2(4); ...

  8. Java学习1:图解Java内存分析详解(实例)

    首先需要明白以下几点: 栈空间(stack),连续的存储空间,遵循后进先出的原则,用于存放局部变量. 堆空间(heap),不连续的空间,用于存放new出的对象,或者说是类的实例. 方法区(method ...

  9. jenkins实例 nodejs项目

    目录 一.案例1 二.案例2 一.案例1 使用shell方式 #清理上一次版本,拉取新代码 rm -rf /server/admin-web cd /server git clone http://g ...

  10. Python列表简介和遍历

    一.Python3列表简介 1.1.Python列表简介 序列是Python中最基本的数据结构 序列中的每个值都有对应的位置值,称之为索引,第一个索引是0,第二个索引是1,以此类推. Python有6 ...