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筛法)相关推荐

  1. [LOJ#6053]简单的函数 题解

    最近在搞min_25筛,就写几道筛法题吧 模板题,直接套板子就好了 //waz #include <bits/stdc++.h>using namespace std;#define mp ...

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

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

  3. loj #6053 简单的函数 min_25筛

    \(\color{#0066ff}{ 题目描述 }\) 某一天,你发现了一个神奇的函数\(f(x)\),它满足很多神奇的性质: \(f(1)=1\) \(f(p^c)=p \oplus c\) (\( ...

  4. LOJ #6053. 简单的函数

    Description Solution \(Min25\) 筛. 要求出 \((1+p_1⊕c_1)*(1+p_2⊕c_2)*....*(1+p_m⊕c_m)\) . 我们可以枚举最小质因子 \(p ...

  5. 《算法竞赛中的初等数论》(五)正文 0x50筛法(ACM / OI / MO)(十五万字符数论书)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 写在最前面:本文部分内容来自网上各大博客或是各类图书,由我个人整理,增加些许见解,仅做学习交流使用,无 ...

  6. 51nod1237(EES解法,省空间)

    这里用的是最近比较流行的EES方法解决的 不了解的可以看下这篇文章: https://blog.csdn.net/Feynman1999/article/details/82874491 这种方法只要 ...

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

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

  8. 【LOJ#6202.】 叶氏筛法(EES)

    计算给定区间内所有质数之和. 输入格式 输入一行两个整数 L,RL,R. 输出格式 输出一个整数,表示 LL 到 RR 之间(包括 LL 和 RR)所有质数的和. 评分方式 假设你的输出是 xx,正确 ...

  9. 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 ...

最新文章

  1. Spring Boot 3.0 M1 发布,正式弃用 Java 8,最低要求 Java 17。。。
  2. NetCore 2.0 MVC入门之 Startup 配置
  3. 使用Spring框架的好处
  4. 图像拼接和图像融合技术
  5. Unet项目解析(6): 图像分块、整合 / 数据对齐、网络输出转成图像
  6. 80后创业故事之:兄弟散伙,创业失败(转)
  7. linux卸载git,并且安装新版本git
  8. python怎么一直循环_python 基础之while无限循环
  9. 2017,人工智能技术如何让中国开发者“倾心”又“上火”!
  10. [No0000FD]C# 正则表达式
  11. Blazor Modal对话框编辑器
  12. oracle 用户创建日期,oracle限制一个用户空闲时间
  13. 建立域用户时遇到的问题。
  14. 卡内基梅隆大学计算机硕士专业,2020年卡内基梅隆大学专业设置
  15. 如何用计算机设计动画,用电脑制作3D动画的详细过程是怎样的?
  16. Android与MVC设计模式相关操作
  17. 达人评测 i3 12100F和i5 10400f选哪个
  18. DDD话语评价之二:“值对象”是DDD的创新吗(上)
  19. netty对http协议解析原理解析
  20. Apple App Store 音乐App 美国畅销榜单前30名使用记录

热门文章

  1. # vim与系统剪切板交互
  2. 海外服务器租用十大地区排名
  3. 区块链落地进行时:专利猛增,构建工业互联网信任价值
  4. 易优cms 后台地址改了,忘记了,去哪个文件能查看啊 Eyoucms快速入门
  5. sql-labs 闯关 11~20
  6. 佳能Linux230快门速度怎么调,佳能6d快门速度怎么调
  7. 【IoT】WiFi 芯片主要厂家
  8. [转]一步步使用3Dmax+Photoshop为游戏关卡设计瓦片化3D模型和无缝贴图(视频教程)...
  9. MATLAB指针式仪表自动读数系统设计
  10. 全球及中国牙科蜡分离剂行业研究及十四五规划分析报告