简单的函数——Min_25筛
就是实现一下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筛的更多相关文章
- 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筛
题目: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 也可以不存下来,因为 ...
- LOJ6053 简单的函数 【Min_25筛】【埃拉托斯特尼筛】
先定义几个符号: []:若方括号内为一个值,则向下取整,否则为布尔判断 集合P:素数集合. 题目分析: 题目是一个积性函数.做法之一是洲阁筛,也可以采用Min_25筛. 对于一个可以进行Min_25筛 ...
- LOJ6053 简单的函数(min_25筛)
题目链接:LOJ 题目大意:从前有个积性函数 $f$ 满足 $f(1)=1,f(p^k)=p\oplus k$.(异或)求其前 $n$ 项的和对 $10^9+7$ 取模的值. $1\le n\le 1 ...
- [LOJ6053]简单的函数:Min_25筛
分析 因为题目中所给函数\(f(x)\)的前缀和无法较快得出,考虑打表以下两个函数: \[ g(x)=x \times [x是质数] \] \[ h(x)=1 \times [x是质数] \] 这两个 ...
- min_25筛
min_25筛 用来干啥? 考虑一个积性函数\(F(x)\),用来快速计算前缀和\[\sum_{i=1}^nF(i)\] 当然,这个积性函数要满足\(F(x),x\in Prime\)可以用多项式表示 ...
- Min_25 筛小结
Min_25 筛这个东西,完全理解花了我很长的时间,所以写点东西来记录一些自己的理解. 它能做什么 对于某个数论函数 \(f\),如果满足以下几个条件,那么它就可以用 Min_25 筛来快速求出这个函 ...
- [复习]莫比乌斯反演,杜教筛,min_25筛
[复习]莫比乌斯反演,杜教筛,min_25筛 莫比乌斯反演 做题的时候的常用形式: \[\begin{aligned}g(n)&=\sum_{n|d}f(d)\\f(n)&=\sum_ ...
随机推荐
- 关于js回调方法 js递归时使用方法
js中递归调用本身可以这样: function a1(n){ a1(n)}但是如果需要在参数n进行自增的情况下判断会出错: function a1(n){ if(n>10) return 'aa ...
- R小问题
步骤 > library(xlsx) > test<-read.csv("I:/山农大学大数据中心/柱状图/z7.csv") > data1=test[] ...
- Qt 利用XML文档,写一个程序集合 三
接上一篇https://www.cnblogs.com/DreamDog/p/9214052.html 滚动区域实现, 滚动区域可以三成分层 第一层,显示内容 中间层,滚动层 第三层,爸爸层 把我们要 ...
- 使用IntelRealScene设备结合Cocos引擎实现体感游戏开发
英特尔开发人员专区原文地址 Cocos游戏开发引擎对于广大开发者来说都比较熟悉,Intel RealScene是什么呢,简单理解是一种特殊的摄像头,可以捕捉用户的手势,面部表情等,进而实现AR,VR的 ...
- DX孟虎点评新兴市场:巴西俄罗斯火爆背后
[亿邦动力网讯]4月3日消息,在第九届中国中小企业电子商务大会暨2014中国(河南)跨境贸易电子商务峰会上,DX公司CEO孟虎对新兴市场做了详细的分析,指出在当今的跨境电商环境下,北美.西欧作为电商成 ...
- 遗传算法框架GAFT优化小记
前言 前段时间一直在用自己写的遗传算法框架测试算法在优化力场参数的效果,但是跑起来效率很慢,因为适应度函数需要调用多次力场程序计算能量,但是还是比我预想中的慢我也没有及时对程序进行profiling和 ...
- 如何使用HtmlTestRunner让自动化测试报告内容更丰富
原文出自:http://www.cnblogs.com/tsbc/p/4128150.html 简述 使用selenium webdriver + Python做自动化测试,执行完成后要生成测试报告, ...
- 只执行一次的js 函数。
function runOnce(fn, context) { //控制让函数只触发一次 return function () { try { fn.apply(context || this, ar ...
- 本周实验PSP0 过程文档
2016-03-12 项目总结: 日期\学习时间 听课 编写程序 阅读相关书籍 日总计 周一 110 0 30 140 周二 0 30 30 60 周三 0 40 0 40 周四 110 20 30 ...
- Android开发第二阶段(2)
昨天:总结了第一阶段的开发经验 今天:学习了一下java中对事件处理这块的初步了解比如设置监听器等 明天:我会走进我们的代码去看看相关的一些知识.