题目链接:LOJ

题目大意:从前有个积性函数 $f$ 满足 $f(1)=1,f(p^k)=p\oplus k$。(异或)求其前 $n$ 项的和对 $10^9+7$ 取模的值。

$1\le n\le 10^{10}$。


这种奇怪但是简洁的积性函数求和,首选 min_25 筛。

首先可以发现,对于质数 $p$,$p\ge 3$ 时 $f(p)=p-1$,$p=2$ 时 $f(p)=p+1$。

所以可以先把 $f(2)$ 看做 $1$,这样方便处理 $g$,最后计算 $S$ 时再加个 $2$ 就好了。

至于 min_25 筛的具体流程,打个广告

时间复杂度 $O(\frac{n^{3/4}}{\log n})$。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=,mod=,inv2=;
#define FOR(i,a,b) for(int i=(a);i<=(b);i++)
#define ROF(i,a,b) for(int i=(a);i>=(b);i--)
#define MEM(x,v) memset(x,v,sizeof(x))
int sq,pri[maxn],pl,tot,id1[maxn],id2[maxn],g0[maxn],g1[maxn],s1[maxn];
bool vis[maxn];
ll n,w[maxn];
inline int add(int a,int b){return a+b<mod?a+b:a+b-mod;}
inline int sub(int a,int b){return a<b?a-b+mod:a-b;}
inline int mul(int a,int b){return (ll)a*b%mod;}
inline int id(ll x){return x<=sq?id1[x]:id2[n/x];}
inline int pre1(ll x){return add(sub(g1[id(x)],g0[id(x)]),x>=?:);}
inline int pre2(ll x){return add(sub(s1[x],x),x?:);}
void init(){
sq=sqrt(n);
FOR(i,,sq){
if(!vis[i]) pri[++pl]=i,s1[pl]=add(s1[pl-],i);
FOR(j,,pl){
if(i*pri[j]>sq) break;
vis[i*pri[j]]=true;
if(i%pri[j]==) break;
}
}
for(ll l=,r;l<=n;l=r+){
r=n/(n/l);
w[++tot]=n/l;
if(n/l<=sq) id1[n/l]=tot;
else id2[n/(n/l)]=tot;
int x=w[tot]%mod;
g0[tot]=sub(x,);
g1[tot]=sub(mul(mul(x,x+),inv2),);
}
}
void calc_g(){
FOR(i,,pl) FOR(j,,tot){
if((ll)pri[i]*pri[i]>w[j]) break;
g0[j]=sub(g0[j],sub(g0[id(w[j]/pri[i])],i-));
g1[j]=sub(g1[j],mul(pri[i],sub(g1[id(w[j]/pri[i])],s1[i-])));
}
}
int solve(ll nn,int x){
if(pri[x]>=nn) return ;
int ans=sub(pre1(nn),pre2(x));
FOR(i,x+,pl){
if((ll)pri[i]*pri[i]>nn) break;
ll pro=;
FOR(j,,){
pro*=pri[i];
if(pro>nn) break;
ans=add(ans,mul(pri[i]^j,add(j!=,solve(nn/pro,i))));
}
}
return ans;
}
int main(){
scanf("%lld",&n);
init();
calc_g();
printf("%d\n",add(,solve(n,)));
}

LOJ6053 简单的函数(min_25筛)的更多相关文章

  1. LOJ.6053.简单的函数(Min_25筛)

    题目链接 Min_25筛见这里: https://www.cnblogs.com/cjyyb/p/9185093.html https://www.cnblogs.com/zhoushuyu/p/91 ...

  2. LOJ 6053 简单的函数——min_25筛

    题目:https://loj.ac/problem/6053 min_25筛:https://www.cnblogs.com/cjyyb/p/9185093.html 这里把计算 s( n , j ) ...

  3. 简单的函数——Min_25筛

    %%yyb %%zsy 就是实现一下Min-25筛 筛积性函数的操作 首先要得到 $G(M,j)=\sum_{t=j}^{cnt} \sum_{e=1}^{p_t^{e+1}<=M} [\phi ...

  4. loj 6053 简单的函数 —— min_25筛

    题目:https://loj.ac/problem/6053 参考博客:http://www.cnblogs.com/zhoushuyu/p/9187319.html 算 id 也可以不存下来,因为 ...

  5. LOJ6053 简单的函数 【Min_25筛】【埃拉托斯特尼筛】

    先定义几个符号: []:若方括号内为一个值,则向下取整,否则为布尔判断 集合P:素数集合. 题目分析: 题目是一个积性函数.做法之一是洲阁筛,也可以采用Min_25筛. 对于一个可以进行Min_25筛 ...

  6. [LOJ6053]简单的函数:Min_25筛

    分析 因为题目中所给函数\(f(x)\)的前缀和无法较快得出,考虑打表以下两个函数: \[ g(x)=x \times [x是质数] \] \[ h(x)=1 \times [x是质数] \] 这两个 ...

  7. LOJ6053 简单的函数

    题目传送门 分析: 对于这道题来说,当\(x\)为质数时: \(~~~~f(x)=x-1+2[x=2]\) 因为除2以外的质数都是奇数,它们与1异或就是减一,然后2就是加一 然后我们先来康康怎么快速求 ...

  8. Min_25 筛

    Min_25 筛 yyb好神仙啊 干什么用的 可以在\(O(\frac{n^{\frac 34}}{\log n})\)的时间内求积性函数\(f(x)\)的前缀和. 别问我为什么是这个复杂度 要求\( ...

  9. [算法]Min_25筛

    前言 本篇文章中使用的字母\(p\),指\(\text{任意的} p \in \text{素数集合}\) 应用场景 若函数\(f(x)\)满足, \(f(x)\)是积性函数 \(f(p)\)可以使用多 ...

随机推荐

  1. JQuery- JQuery学习

    jQuery与JavaScript加载页面的区别 1.JavaScript传统的方式页面加载会存在覆盖问题,加载比jQuery慢(整个页面加载完毕<包含里面的其他内容,比如图片>) 2.j ...

  2. 模拟RPG格斗

    三个英雄角色参与PK 每个英雄具有以下几个属性:生命值(为0时英雄倒下).攻击力(每次攻击时扣除对方的生命值点数).攻击间隔(每次攻击过后都要等待间隔时间才能进行下次攻击,首次攻击之前也要先等待间隔时 ...

  3. Linux下c++11多线程聊天室

    刚看的c++11多线程,写个聊天室试试编译的时候加上 c++11 和 多线程库g++ -Wall -std=c++0x -pthread -o server server.cppserver 和cli ...

  4. jQuery JS 入门记录

    1.类型转换 .toString() 转字符串 . parseInt() parseFloat() 强制转换 数字型(Number) 1.声明 var i = 1; var i = new Numbe ...

  5. node.js+express+jade系列三:404错误的配置

    1:新建一个404.jade 2:在app.js后面配置如下代码 app.use(function(req, res){        res.render("404", {sta ...

  6. leetcode 204. Count Primes(线性筛素数)

    Description: Count the number of prime numbers less than a non-negative number, n. 题解:就是线性筛素数的模板题. c ...

  7. ONTAK2010 Peaks加强版

    给一个图,每个点有点权,$q$ 次询问从 $x$ 开始只走点权小于等于 $y$ 的路径能到的点中第 $k$ 大的点权,无解输出 -1 强制在线 请注意因为这个 sb 博主为了描述方便,这里的题目描述用 ...

  8. BZOJ2286 [Sdoi2011]消耗战 和 BZOJ3611 [Heoi2014]大工程

    2286: [Sdoi2011]消耗战 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 6371  Solved: 2496[Submit][Statu ...

  9. Operating System-Process(1)什么是进程&&进程的创建(Creation)&&进程的终止(Termination)&&进程的状态(State)

    本文阐述操作系统的核心概念之一:进程(Process),主要内容: 什么是进程 进程的创建(Creation) 进程的终止(Termination) 进程的状态(State) 一.什么是进程 1.1 ...

  10. 获得Azure订阅LoadBalancer的脚本

    有客户希望可以通过一条命令获得一个Azure订阅中所有的负载均衡器. 目前在Azure的powershell中是没有这中命令的.但我们可以通过脚本的方式实现. 下面就是获得所有负载均衡的脚本: par ...