%%yyb

%%zsy

就是实现一下Min-25筛 筛积性函数的操作

首先要得到

$G(M,j)=\sum_{t=j}^{cnt} \sum_{e=1}^{p_t^{e+1}<=M} [\phi(p_t^e)*G([M/(p_t^e)],t+1)+\phi(p_t^{(e+1)})]$
​ $+(F(M)-(F(p_{j-1})))$

先要预处理后面的部分,得到$F(M)$和$F(p_{j-1})$

$F(p_{j-1})$可以直接筛素数的时候前缀和计算一下

$F(M)$就要利用第一步的筛法了

发现,除了2之外的质数都是奇数,所以f(p^1)=p xor 1=p-1

对于2要特判

对于G,直接根据式子大力计算即可。

递归处理。由于值还是比较分散的,所以没有记忆化的必要。(而且状态很多,对空间极为不友好)

剪枝:pri[t]的平方大于n就不用继续算了。

代码:

#include<bits/stdc++.h>
#define il inline
#define reg register int
#define int long long
#define numb (ch^'0')
using namespace std;
typedef long long ll;
il void rd(int &x){
char ch;bool fl=false;
while(!isdigit(ch=getchar()))(ch=='-')&&(fl=true);
for(x=numb;isdigit(ch=getchar());x=x*+numb);
(fl==true)&&(x=-x);
}
namespace Miracle{
const int N=5e5+;
const int M=5e5+;
const int mod=1e9+;
int pri[M],tot;
int sum[M];//pre of prime
bool vis[N];
int sqr;
ll f[N],g[N],h[N];
void sieve(int n){
for(reg i=;i<=n;++i){
if(!vis[i]){
vis[i]=;
pri[++tot]=i;
}
for(reg j=;j<=tot;++j){
if(i*pri[j]>n) break;
vis[i*pri[j]]=;
if(i%pri[j]==) break;
}
}
for(reg i=;i<=tot;++i){
sum[i]=(sum[i-]+pri[i])%mod;
g[i]=(g[i-]+(pri[i]^))%mod;
}
}
int id1[N],id2[N]; ll val[N];
ll n;
int S(int x,int j){
if(x<=||x<pri[j]) return ;
cout<<" xx "<<x<<" jj "<<j<<endl;
int d=(x<=sqr)?id1[x]:id2[n/x];
int ret=(f[d]-g[j-]+mod)%mod;
for(reg t=j;t<=tot&&pri[t]*pri[t]<=x;++t){
int now=pri[t];
for(reg e=;now*pri[t]<=x;now=now*pri[t],++e){
ret=(ret+(pri[t]^e)*S(x/now,t+)%mod+(pri[t]^(e+))%mod)%mod;
}
}
return ret;
}
int main(){
scanf("%lld",&n);
if(n==){
puts("");return ;
}
sqr=sqrt(n);
// cout<<" sqr "<<sqr<<endl;
sieve(sqr);
// cout<<" after sieve "<<endl;
int m=;
for(ll i=,x;i<=n;i=x+){
x=n/(n/i);
val[++m]=n/i;
if(val[m]<=sqr) id1[val[m]]=m;
else id2[n/val[m]]=m;
}
for(reg i=;i<=m;++i){
f[i]=val[i]-;h[i]=(((ll)val[i]%mod*(val[i]%mod+))/-+mod)%mod;
}
for(reg j=;j<=tot;++j){
for(reg i=;i<=m&&(ll)pri[j]*pri[j]<=val[i];++i){
int to=(val[i]/pri[j])<=sqr?id1[val[i]/pri[j]]:id2[n/(val[i]/pri[j])];
f[i]=(f[i]-(f[to]-(j-))+mod+mod)%mod;
h[i]=(h[i]-pri[j]*(h[to]-sum[j-]+mod)%mod+mod)%mod;
}
}
for(reg i=;i<=m;++i){
if(val[i]>=) f[i]=(h[i]-f[i]++mod)%mod;
else f[i]=;
}
//cout<<" after prewrk "<<endl;
printf("%lld",(S(n,)+)%mod);
return ;
} }
signed main(){
Miracle::main();
return ;
} /*
Author: *Miracle*
Date: 2019/1/13 17:03:03
*/

简单的函数——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. loj 6053 简单的函数 —— min_25筛

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

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

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

  5. LOJ6053 简单的函数(min_25筛)

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

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

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

  7. min_25筛

    min_25筛 用来干啥? 考虑一个积性函数\(F(x)\),用来快速计算前缀和\[\sum_{i=1}^nF(i)\] 当然,这个积性函数要满足\(F(x),x\in Prime\)可以用多项式表示 ...

  8. Min_25 筛小结

    Min_25 筛这个东西,完全理解花了我很长的时间,所以写点东西来记录一些自己的理解. 它能做什么 对于某个数论函数 \(f\),如果满足以下几个条件,那么它就可以用 Min_25 筛来快速求出这个函 ...

  9. [复习]莫比乌斯反演,杜教筛,min_25筛

    [复习]莫比乌斯反演,杜教筛,min_25筛 莫比乌斯反演 做题的时候的常用形式: \[\begin{aligned}g(n)&=\sum_{n|d}f(d)\\f(n)&=\sum_ ...

随机推荐

  1. Qt-QMl-自定义自己想要的TabView

    上效果图 上实现源码,这里的代码都是来自Qt官方源码修改其中某一行内容 /* 作者:张建伟 时间:2018年4月8日 简述:自定义TabView,主要实现Tab和实现内容重叠,不在占用独立空间 该文件 ...

  2. HDU-1053:Advanced Fruits(LCS+路径保存)

    链接:HDU-1053:Advanced Fruits 题意:将两个字符串合成一个串,不改变原串的相对顺序,可将相同字母合成一个,求合成后最短的字符串. 题解:LCS有三种状态转移方式,将每个点的状态 ...

  3. Eclipse将Java项目打成jar工具包

    jar包:就是别人已经写好的一些类,然后将这些类进行打包,你可以将这些jar包引入你的项目中,然后就可以直接使用这些jar包中的类和属性以及方法. jar包可分为可执行jar包和jar工具包,在这里, ...

  4. 【转】AOE机制的DSL及其实际运用

    AOE这个词的意思,我相信玩过WOW的人都不陌生,包括玩过LoL的也不会陌生,说穿了就是一个区域内发生效果(Area of effect).这里我们要讨论的就是关于一个适合于几乎所有游戏的AOE机制, ...

  5. Spring单元测试集成H2数据库

    项目源代码在:Spring-H2测试 H2简介 H2数据库是一种由Java编写的,极小,速度极快,可嵌入式的数据库.非常适合用在单元测试等数据不需要保存的场景下面. 以下时其官网的介绍: {% blo ...

  6. 【Python进阶】用 Python 统计字数

    问题描述: 用 Python 实现函数 count_words(),该函数输入字符串 s 和数字 n,返回 s 中 n 个出现频率最高的单词.返回值是一个元组列表,包含出现次数最高的 n 个单词及其次 ...

  7. Python爬虫入门(6):Cookie的使用

    为什么要使用Cookie呢? Cookie,指某些网站为了辨别用户身份.进行session跟踪而储存在用户本地终端上的数据(通常经过加密) 比如说有些网站需要登录后才能访问某个页面,在登录之前,你想抓 ...

  8. [笔记] mysql5.6一些编译参数

    cmake \ -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ -DSYSCONFDIR=/etc \ -DWITH_INNOBASE_STORAGE_ENGINE ...

  9. FPGA选型

    工欲善其事必先利其器,开发FPGA的第一步,当然是选择一片符合你设计需求的芯片. 但是芯片种类那么多,老板又要你越省越好,硬件工程师也天天问你到底该用哪块芯片,怎么办? 今天正好可以跟大家聊聊这些问题 ...

  10. 多源最短路——Floyd算法

    Floyd算法 问题的提出:已知一个有向网(或者无向网),对每一对定点vi!=vj,要求求出vi与vj之间的最短路径和最短路径的长度. 解决该问题有以下两种方法: (1)轮流以每一个定点为源点,重复执 ...