Description

Solution

\(Min25\) 筛.
要求出 \((1+p_1⊕c_1)*(1+p_2⊕c_2)*....*(1+p_m⊕c_m)\) .
我们可以枚举最小质因子 \(p\) , 那么就要求剩下选的数都不含小于 \(p\) 的质因子 , 也就是 \(p\) 作为最小质因子 .
设 \(S(n,k)\) 表示当前要求 \(\sum_{i=2}^{n}f[i]\) , 且最小质因子要为 \(p[k]\) 的贡献 , \(p_k\) 是第 \(k\) 个质数.
那么枚举 \(i>k\) , 并枚举 \(p[i]\) 的次数 \(c\) , 然后递归做 \(S(\frac{n}{p[i]^c},i)\) 即可.
要做这个 , 就要快速求出一段的质因子的 \(f(i)\) 的和.
于是我们预处理出 \(s(i)\) 表示小于等于 \(i\) 的质因子的 \(f\) 之和 .
方法就是枚举所有质数 , 设 \(g(n,i)\) 表示已经用 \(p_1,p_2,p_3,...,p_i\) 筛完了 \([2,n]\) 后剩余的数的贡献和.
也就是说 \(g(n,i)=\sum_{j=2}^{n}\)[\(j\) 的最小质因子>=\(i\)或者 \(j\) 是质数]\(*f[j]\).
不满足上述条件的数已经被减去了 , 所以不需要被重复减去.
当 \(p_i*p_i>n\) 时 , \(g(n,i)=g(n,i-1)\).
否则 \(g(n,i)=g(n,i-1)-(g(\frac{n}{p_i},i-1)-g(p_i,i-1))*f(p_i)\) .
实现有一定小技巧 , 参见代码 .

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e5+10,mod=1e9+7;
ll n,s[N],c[N],w[N],p[N];int m=0,sqr,cnt=0;
inline int id(ll x){return x<=sqr?x:m-(n/x)+1;}
//每个数在c,w,s数组中的下标,小于sqrt的显然是本身,否则就是后者.
inline int S(ll n,int k){if(n<=p[k])return 0;int ret=(s[id(n)]-s[p[k]]+mod)%mod;//一段区间的质因子的f之和.for(int i=k+1;i<=cnt && n/p[i]>=p[i];i++){//枚举最小质因子int c=1;for(ll j=n;(j/=p[i])>=p[i];c++)//枚举次数ret=(ret+1ll*(p[i]^c)*S(j,i)+(p[i]^(c+1)))%mod;}return ret;
}
int main(){freopen("pp.in","r",stdin);freopen("pp.out","w",stdout);cin>>n;sqr=sqrt(n);for(ll i=1,j;i<=n;i=j+1){w[++m]=j=n/(n/i);//由于S(n,k)中的n只会是n的约数,所以只需要预处理所有约数的贡献和就行了.s[m]=(j&1?(j+1)/2*j:j/2*(j+1))-1;c[m]=j-1;//n为10^10,会爆long long,所以先除再乘.//s[i]是小于等于i的质数和,c[i]是小于等于i的质数个数.}for(int i=2,t;i<=sqr;i++){if(c[i]==c[i-1])continue;//c[i]==c[i-1]说明这个数不是质数p[++cnt]=i;for(int j=m;w[j]/i>=i;j--)s[j]-=(s[t=id(w[j]/i)]-s[i-1])*i,c[j]-=c[t]-c[i-1];}//由于f(pi)=pi^1,所以除了f(2)=2+1以外,其他的都是f(p)=f(p)-1for(int i=2;i<=m;i++)s[i]-=c[i]-2;cout<<(S(n,0)+1)%mod;return 0;
}

转载于:https://www.cnblogs.com/Yuzao/p/9269541.html

LOJ #6053. 简单的函数相关推荐

  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筛

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

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

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

  4. Min_25筛(LibreOJ #6053: 简单的函数)

    一个简单的问题:求 (i为质数) 设小于的质数有t个,其中表示第i个质数 再设  (i为质数或者i的最小质因子不小于) 那么有             其中 ,  就是答案 因为每次S(x, y)都是 ...

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

    LOJ6053简单的函数 https://loj.ac/p/6053 min_25筛模板题,但是要注意质数点有2比较特殊,需要在y==0的时候特判质数包含2的情况. #include<bits/ ...

  6. R语言笔记6:在R中写一些简单的函数、functions基础和作用域

    R语言基础系列: 1数据类型(向量.数组.矩阵. 列表和数据框) 2读写数据所需的主要函数.与外部环境交互 3数据筛选--提取对象的子集 4向量.矩阵的数学运算 5控制结构 Your first R ...

  7. 开源纯C日志函数库iLOG3快速入门(八、如果你喜欢简单日志函数甚于日志函数库)...

    2019独角兽企业重金招聘Python工程师标准>>> 开源纯C日志函数库iLOG3快速入门(八.如果你喜欢简单日志函数甚于日志函数库) 很多网友来信坚持表达了在项目中应使用简单日志 ...

  8. 初学__Python——Python 最简单的函数—用 lambda 声明函数

    用 lambda 表达式来声明函数,是Python中一类比较特殊的声明函数的方式,lambda 来源于 LISP 语言,使用 lambda 可以声明一个匿名函数.所谓匿名函数是指所声明的函数没有函数名 ...

  9. vue函数如何调用其他函数?_编程|如何简单理解函数的传参、返回、调用

    1 函数内部变量的局部性 在一个函数中定义的变量(包括实参),其作用域仅限于定义它的函数中,在其它的函数不能使用,这种变量称为"局部变量". 局部变量的作用域:函数内部声明和定义的 ...

最新文章

  1. 如何同时安装Office2003和Office2007!
  2. 职场疑问:如何进行技术面试
  3. apache配置文件httpd.conf----小白福利
  4. 用最少数量的箭引爆气球
  5. cnn图像进行预测_CNN方法:使用聚合物图像预测其玻璃化转变温度
  6. oracle字段公式怎么执行,Oracle 在存储过程或函数中执行字符串sql PDF 下载
  7. MVC过滤整个项目输入关键字
  8. C语言动态存储分配函数
  9. C# 判断上传图片是否被PS修改过的方法
  10. System.Security.Cryptography.CryptographicException
  11. 【QA】哈工大张伟男:任务型对话系统
  12. 三星t959手机sim卡网络解锁pin码处理方法
  13. 什么是示波器的采样率
  14. 产品读书《创业维艰:如何完成比难更难的事》
  15. 50k热敏电阻温度对照表c语言,50K热敏电阻温度表
  16. 网络性能指标及测试方法
  17. 热备用冷备用_个性化您的备用帐户的10种方法
  18. PyTorch(13)---优化器_随机梯度下降法
  19. 我的世界服务器怎么显示腐竹来了,我的世界服务器主人可用指令一览 我的世界腐竹常用指令介绍_游侠手游...
  20. 论文图片排版 Adobe Illustrator 操作演示

热门文章

  1. 如何下载HLS视频到本地(m3u8)
  2. 深入入门正则表达式(java) - 1 - 入门基础
  3. 代腾飞(为自己名字作诗)
  4. (进阶)LeetCode(119)——杨辉三角 II(JavaScript)
  5. LeetCode(908)——最小差值 I(JavaScript)
  6. ionic 1页面跳转登录页面后,返回按钮处理
  7. 动态图制作软件设计(二)
  8. C++---set/multiset用法介绍
  9. FlexSPI对写时序支持
  10. 怎样教育孩子,能让孩子有更好的学习?