Loj 6053(EES筛法)
problem
思路
满足EES筛法的要求
考虑f(p)f(p)f(p)即p1p^1p1是啥,当p>2p>2p>2时,f(p)=p−1f(p)=p-1f(p)=p−1,而f(2)=3f(2)=3f(2)=3
所以预处理出p1,p0p^1,p^0p1,p0的前缀和即可
并注意,当i>=2i>=2i>=2时,这个前缀和少计算了2(即p=2的贡献3-1),所以加上一下
在dfs中维护时,没什么特别的,先计数第一类贡献(当前数乘以更大的素数的贡献),再计数第二类贡献(最大的质因子有更大的指数)
注意别忘了取模
//phi(1^2)=1
//phi(p^2)=p^2-p
//phi((p^e)^2)=phi((p^{e-1})^2)*p*p;
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod=1e9+7;
const int ni6=166666668;
const int ni2=500000004;
ll n,M;
vector<int> pre[2],hou[2],primes;inline int add(const int x, const int v) {return x + v >= mod ? x + v - mod : x + v;
}
inline int dec(const int x, const int v) {return x - v < 0 ? x - v + mod : x - v;
}//这里res是n/枚举的数
int dfs(ll res, int last, ll f){//最大质因子是prime[last-1] 但将1放在外面值显然一样int t=dec((res > M ? hou[1][n/res] : pre[1][res]),pre[1][primes[last]-1]);int ret= t*f%mod;//这里需修改for(int i=last;i<(int) primes.size();++i){int p = primes[i];if((ll)p*p > res) break;int e=1;for(ll q=p,nres=res,nf=f*(p^e)%mod;q*p<=res;q*=p){//nf需修改ret = add(ret,dfs(nres/=p,i+1,nf));//枚举更大的数e++;nf = f* (p^e)%mod;ret =add(ret,nf);//指数大于1时,记上贡献}}return ret;
}inline int ff(ll x){x%=mod;return x*(x+1)%mod*ni2%mod;
}int solve(ll n){M=sqrt(n);for(int i=0;i<2;++i){pre[i].clear();pre[i].resize(M+1);hou[i].clear();hou[i].resize(M+1);}primes.clear();primes.reserve(M+1);for(int i=1;i<=M;++i){pre[0][i]=i-1;hou[0][i]=(n/i-1)%mod;pre[1][i]=dec(ff(i),1);hou[1][i]=dec(ff(n/i),1);}for(int p=2;p<=M;++p){if(pre[0][p]==pre[0][p-1]) continue;primes.push_back(p);const ll q=(ll)p*p,m=n/p;const int pnt0=pre[0][p-1],pnt1=pre[1][p-1];const int mid=M/p;const int End=min((ll)M,n/q);for(int i=1;i<=mid;++i){hou[0][i]=dec(hou[0][i],dec(hou[0][i*p],pnt0));hou[1][i]=dec(hou[1][i],dec(hou[1][i*p],pnt1)*(ll)p%mod);//hou[2][i]=dec(hou[2][i],dec(hou[2][i*p],pnt2)*q%mod);}for(int i=mid+1;i<=End;++i){hou[0][i]=dec(hou[0][i],dec(pre[0][m/i],pnt0));hou[1][i]=dec(hou[1][i],dec(pre[1][m/i],pnt1)*(ll)p%mod);//hou[2][i]=dec(hou[2][i],dec(pre[2][m/i],pnt2)*q%mod);}for(int i=M;i>=q;--i){pre[0][i]=dec(pre[0][i],dec(pre[0][i/p],pnt0));pre[1][i]=dec(pre[1][i],dec(pre[1][i/p],pnt1)*(ll)p%mod);//pre[2][i]=dec(pre[2][i],dec(pre[2][i/p],pnt2)*q%mod);}}primes.push_back(M+1);for (int i = 1; i <= M;++i) {pre[1][i] = i>=2 ? add(2,dec(pre[1][i], pre[0][i])) : (dec(pre[1][i], pre[0][i]));//p-1hou[1][i] = n>=2*i ? add(2,dec(hou[1][i], hou[0][i])) :(dec(hou[1][i], hou[0][i]));}return n>1 ? add(dfs(n,0,1),1) : 1;//别忘了加上1的贡献
}int main()
{//freopen("in.txt","r",stdin);ios::sync_with_stdio(false);cin>>n;cout<<solve(n)<<endl;return 0;
}
Loj 6053(EES筛法)相关推荐
- [LOJ#6053]简单的函数 题解
最近在搞min_25筛,就写几道筛法题吧 模板题,直接套板子就好了 //waz #include <bits/stdc++.h>using namespace std;#define mp ...
- 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筛
\(\color{#0066ff}{ 题目描述 }\) 某一天,你发现了一个神奇的函数\(f(x)\),它满足很多神奇的性质: \(f(1)=1\) \(f(p^c)=p \oplus c\) (\( ...
- LOJ #6053. 简单的函数
Description Solution \(Min25\) 筛. 要求出 \((1+p_1⊕c_1)*(1+p_2⊕c_2)*....*(1+p_m⊕c_m)\) . 我们可以枚举最小质因子 \(p ...
- 《算法竞赛中的初等数论》(五)正文 0x50筛法(ACM / OI / MO)(十五万字符数论书)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 写在最前面:本文部分内容来自网上各大博客或是各类图书,由我个人整理,增加些许见解,仅做学习交流使用,无 ...
- 51nod1237(EES解法,省空间)
这里用的是最近比较流行的EES方法解决的 不了解的可以看下这篇文章: https://blog.csdn.net/Feynman1999/article/details/82874491 这种方法只要 ...
- [复习]莫比乌斯反演,杜教筛,min_25筛
[复习]莫比乌斯反演,杜教筛,min_25筛 莫比乌斯反演 做题的时候的常用形式: \[\begin{aligned}g(n)&=\sum_{n|d}f(d)\\f(n)&=\sum_ ...
- 【LOJ#6202.】 叶氏筛法(EES)
计算给定区间内所有质数之和. 输入格式 输入一行两个整数 L,RL,R. 输出格式 输出一个整数,表示 LL 到 RR 之间(包括 LL 和 RR)所有质数的和. 评分方式 假设你的输出是 xx,正确 ...
- 2017 多校2 hdu 6053 TrickGCD
2017 多校2 hdu 6053 TrickGCD 题目: You are given an array \(A\) , and Zhu wants to know there are how ma ...
最新文章
- Spring Boot 3.0 M1 发布,正式弃用 Java 8,最低要求 Java 17。。。
- NetCore 2.0 MVC入门之 Startup 配置
- 使用Spring框架的好处
- 图像拼接和图像融合技术
- Unet项目解析(6): 图像分块、整合 / 数据对齐、网络输出转成图像
- 80后创业故事之:兄弟散伙,创业失败(转)
- linux卸载git,并且安装新版本git
- python怎么一直循环_python 基础之while无限循环
- 2017,人工智能技术如何让中国开发者“倾心”又“上火”!
- [No0000FD]C# 正则表达式
- Blazor Modal对话框编辑器
- oracle 用户创建日期,oracle限制一个用户空闲时间
- 建立域用户时遇到的问题。
- 卡内基梅隆大学计算机硕士专业,2020年卡内基梅隆大学专业设置
- 如何用计算机设计动画,用电脑制作3D动画的详细过程是怎样的?
- Android与MVC设计模式相关操作
- 达人评测 i3 12100F和i5 10400f选哪个
- DDD话语评价之二:“值对象”是DDD的创新吗(上)
- netty对http协议解析原理解析
- Apple App Store 音乐App 美国畅销榜单前30名使用记录
热门文章
- # vim与系统剪切板交互
- 海外服务器租用十大地区排名
- 区块链落地进行时:专利猛增,构建工业互联网信任价值
- 易优cms 后台地址改了,忘记了,去哪个文件能查看啊 Eyoucms快速入门
- sql-labs 闯关 11~20
- 佳能Linux230快门速度怎么调,佳能6d快门速度怎么调
- 【IoT】WiFi 芯片主要厂家
- [转]一步步使用3Dmax+Photoshop为游戏关卡设计瓦片化3D模型和无缝贴图(视频教程)...
- MATLAB指针式仪表自动读数系统设计
- 全球及中国牙科蜡分离剂行业研究及十四五规划分析报告