题目: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. Spring注解(环境)

    以数据库为例: 引入 c3p0数据源maven坐标 数据库驱动 @Configuration @PropertySource("classpath:/db.config.properties ...

  2. 我的nodejs 快速入门

    每行以封号结尾(可有可无) 变量定义没有类型 都用var 或者直接const log打印:console.log(db); 内置属性这样写法:__filename.__dirname等 functio ...

  3. StrStr,判断一个字符串是不是另一个字符串的字串,并返回子串的位置

    public int strStr(String haystack, String needle) { if(haystack == null || needle == null) { return ...

  4. 微信app支付java后台流程、原理分析及nei网穿透

    一.流程步骤 本实例是基于springmvc框架编写 1.执行流程           当手机端app(就是你公司开发的app)在支付页面时,调起服务端(后台第1个创建订单接口)接口,后台把需要调起微 ...

  5. LeetCode第[46]题(Java):Permutations(求所有全排列) 含扩展——第[47]题Permutations 2

    题目:求所有全排列 难度:Medium 题目内容: Given a collection of distinct integers, return all possible permutations. ...

  6. 智课雅思词汇---二十五、形容词后缀-ate-fic-ose-ulent-olent-ous-ulous-y

    智课雅思词汇---二十五.形容词后缀-ate-fic-ose-ulent-olent-ous-ulous-y 一.总结 一句话总结: 1.形容词后缀-ate(determinate)? determi ...

  7. python学习笔记(pict+subprocess)

    这几天看到接口自动化用例的生成,关于这里博主自己也想了想,是否可以根据参数的范围自动生成用例,这样就不用一条一条的写接口测试用例 这里就设计到用例设计的方法,让我想到之前接触过一款微软的用例自动生成工 ...

  8. python 爬虫003-正则表达式简单介绍

    正则表达式,简单的说就是用一个“字符串”来描述一个特征,然后去验证另外一个“字符串”是否符合这个特征. 正则表达式在线测试工具 http://tool.chinaz.com/regex 实例一,判断字 ...

  9. 51nod 1287 线段树

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1287 简单的线段树题目,直接写个二分查找大于等于x的最小位置就好了. # ...

  10. Log4j 发送 EMail 的配置

    项目上线后,运行时往往也还会有异常发生,在异常抛出时,希望即时的得到反馈.所以需要配置LOG4J的发送EMAIL功能. 项目中原来使用的的Log4j版本为1.2.9 ,但此版本并不支持邮件服务的认证功 ...