题目:https://loj.ac/problem/6053

参考博客:http://www.cnblogs.com/zhoushuyu/p/9187319.html

算 id 也可以不存下来,因为 \( \left \lfloor \frac{i}{n} \right \rfloor \) 的取值是连续的,当 \( i \leqslant \sqrt{n} \) 时取值就是 \( i \);

而 \( i > \sqrt{n} \) 时,因为 \( i \) 越大,\( \left \lfloor \frac{i}{n} \right \rfloor \) 越小直到变成 1,所以编号可以直接数到;

注意 int 类型的 \( \sqrt{n} \) 是下取整的,所以判断条件最好写成 \( x > \sqrt{n} \) 而非 \( x \geqslant \sqrt{n} \);

因为 \( n \) 是 1e10 的,所以各种地方要注意不能爆 long long;

质数的 \( f \) 应该也可以直接筛吧(就直接令所有 \( f[i] = i-1 \)),不过质数和 - 质数个数也很方便。

代码如下:

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long ll;
int const xn=1e6+,mod=1e9+;
int m,f[xn],h[xn],pri[xn],cnt,sqr,ps[xn];
ll n,w[xn]; bool vis[xn];
ll pw(ll a,ll b){a%=mod; b%=(mod-); ll ret=; for(;b;b>>=,a=a*a%mod)if(b&)ret=ret*a%mod; return ret;}
int upt(ll x){while(x>=mod)x-=mod; while(x<)x+=mod; return x;}
void init()
{
for(int i=;i<=sqr;i++)
{
if(!vis[i])pri[++cnt]=i,ps[cnt]=upt(ps[cnt-]+i);
for(int j=;j<=cnt&&(ll)i*pri[j]<=sqr;j++)
{
vis[i*pri[j]]=;
if(i%pri[j]==)break;
}
}
}
int Id(ll x)
{
if(x>sqr)return n/x;//>!
else return m-x+;
}
int S(ll x,int y)
{
if(x<=||pri[y]>x)return ;
int k=Id(x);
int ret=upt((ll)f[k]-h[k]-(ps[y-]-y+));
if(y==)ret=upt(ret+);
for(int i=y;i<=cnt&&(ll)pri[i]*pri[i]<=x;i++)
{
ll p0=pri[i],p1=(ll)pri[i]*pri[i];//ll
for(int k=;p1<=x;k++,p0=p1,p1*=pri[i])
ret=upt(ret+(ll)(pri[i]^k)*S(x/p0,i+)%mod+(pri[i]^(k+)));
}
return ret;
}
int main()
{
scanf("%lld",&n); sqr=sqrt(n); int inv2=pw(,mod-); init();
for(ll i=,j;i<=n;i=j+)
{
w[++m]=n/i; j=n/(n/i);
f[m]=(ll)upt(w[m]+)*upt(w[m]-)%mod*inv2%mod;//upt!
f[m]=upt(f[m]);//筛质数和
h[m]=upt(w[m]-);//筛质数个数
}
for(int j=;j<=cnt;j++)//j=1
for(int i=;i<=m&&w[i]>=(ll)pri[j]*pri[j];i++)
{
int k=Id(w[i]/pri[j]);
f[i]=upt(f[i]-(ll)pri[j]*(f[k]-ps[j-])%mod);
h[i]=upt(h[i]-h[k]+j-);
}
printf("%d\n",upt(S(n,)+));
return ;
}

loj 6053 简单的函数 —— min_25筛的更多相关文章

  1. LOJ 6053 简单的函数——min_25筛

    题目:https://loj.ac/problem/6053 min_25筛:https://www.cnblogs.com/cjyyb/p/9185093.html 这里把计算 s( n , j ) ...

  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筛)

    传送门 题解 \(Min\_25\)筛有毒啊--肝了一个下午才看懂是个什么东西-- \(zsy\)巨巨强无敌-- //minamoto #include<bits/stdc++.h> #d ...

  4. 简单的函数——Min_25筛

    %%yyb %%zsy 就是实现一下Min-25筛 筛积性函数的操作 首先要得到 $G(M,j)=\sum_{t=j}^{cnt} \sum_{e=1}^{p_t^{e+1}<=M} [\phi ...

  5. LOJ #6053. 简单的函数

    $Min$_$25$筛模版题 为什么泥萌常数都那么小啊$ QAQ$ 传送门:Here 题意: $ f(1)=1$$ f(p^c)=p⊕c(p 为质数,⊕ 表示异或)$$ f(ab)=f(a)f(b)( ...

  6. LOJ.6235.区间素数个数(Min_25筛)

    题目链接 \(Description\) 给定\(n\),求\(1\sim n\)中的素数个数. \(2\leq n\leq10^{11}\). \(Solution\) Min_25筛.只需要求出\ ...

  7. LOJ #6202. 叶氏筛法(min_25 筛)

    题意 求 \([L, R]\) 之间的素数之和 . \(L≤10^{10},2×10^{10} \le R \le 10^{11}\) 题解 一个有点裸的 min_25筛 ? 现在我只会筛素数的前缀和 ...

  8. min_25筛

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

  9. 「算法笔记」Min_25 筛

    戳 这里(加了密码).虽然写的可能还算清楚,但还是不公开了吧 QwQ. 真的想看的 私信可能会考虑给密码 qwq.就放个板子: //LOJ 6053 简单的函数 f(p^c)=p xor c #inc ...

随机推荐

  1. 为JAXB和response设置编码,解决wechat4j中文乱码

    如果有哪一个做程序员的小伙伴说自己没有遇到中文乱码问题,我是不愿意相信的.今天在做微信订阅号的智能回复时,又一时迷乱的跳进了中文乱码这个火坑.刚解决问题时,都欢呼雀跃了,完全忘记了她曾经带给我的痛苦. ...

  2. 什么是webhook

    什么是webhook 翻译,原文地址:https://sendgrid.com/blog/webhook-vs-api-whats-difference/ 一.概述 Webhook是一个API概念,并 ...

  3. zabbix 邮件报警

    一.设置sendmail 安装sendmail yum install -y sendmail systemctl start sendmail.service 配置 cd  /usr/lib/zab ...

  4. Sqoop-将MySQL数据导入到hive orc表

    sqoop创建并导入数据到hive orc表 sqoop import \ --connect jdbc:mysql://localhost:3306/spider \ --username root ...

  5. NumPy在数组上的迭代

    NumPy - 数组上的迭代 NumPy 包包含一个迭代器对象numpy.nditer. 它是一个有效的多维迭代器对象,可以用于在数组上进行迭代. 数组的每个元素可使用 Python 的标准Itera ...

  6. Nginx 常用配置模板

    user root root; worker_processes auto; worker_rlimit_nofile 51200; events { use epoll; worker_connec ...

  7. ARM的37个寄存器

    31个通用寄存器,包括程序计数器(PC)在内.这些寄存器都是32位寄存器. 6个状态寄存器.这些寄存器都是32位寄存器. 通用寄存器(R0-R15)可分为三类 :不分组寄存器R0~R7: 分组寄存器R ...

  8. LeetCode OJ:Recover Binary Search Tree(恢复二叉搜索树)

    Two elements of a binary search tree (BST) are swapped by mistake. Recover the tree without changing ...

  9. 理解RESTful风格(转)

    原文链接:http://www.ruanyifeng.com/blog/2011/09/restful.html 越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 这种"互联网软件 ...

  10. 解决AndroidStudio导入项目在 Building gradle project info 一直卡住

    Android Studio导入项目的时候,一直卡在Building gradle project info这一步,主要原因还是因为被墙的结果.gradle官网虽然可以访问,但是速度连蜗牛都赶不上.. ...