2018 南京网络预赛Sum - 线性筛
题意
定义 $f(x)$ 为满足以下条件的有序二元组 $(a, b)$ 的方案数(即 $(a, b)$ 与 $(b, a)$ 被认为是不同的方案):
- $x= ab$
- $a$ 和 $b$ 均无平方因子(即因子中没有除1之外的完全平方数)
求 $\displaystyle \sum_{i=1}^nf(i), 1 \leq n\leq 2 \times 10^7$.
分析
显然,$f(n)$ 是积性函数,考虑线性筛。
- 当 $x$为素数时, $f(x)=2$,即 $(1,x)$ 和 $(x,1)$;
- 当 $x$ 的最小质因子为 $p$,且 $p \nmid \frac{x}{p}$ 时,$f(x) = f(p)f(\frac{x}{p}) = 2f(\frac{x}{p})$;
- 当 $x$ 的最小的质因数为 $p$,且 $p \mid \frac{x}{p}$
- 如果 $p \mid \frac{x}{p^2}$,那么 $x$ 中的 $p$ 的指数至少为3,即不管如何划分 $(a, b)$,两个数中一定有一个数其 $p$ 的指数大于等于2,即不存在合法的方案
- 否则, $x$中 $p$ 的指数就为2,把这两个 $p$ 分别分给 $a$ 和 $b$,剩余的 $\frac{x}{p^2}$就是一个子问题,即 $f(x) = f(\frac{x}{p^2}) = f(\frac{x}{p})f(\frac{1}{p}) = f(\frac{x}{p})/2$
#include<bits/stdc++.h>
using namespace std; const int maxn = 2e7 + ;
int n;
int vis[maxn], primes[maxn], primeCnt;
int f[maxn], s[maxn]; //f(i)的前缀和 void seive()
{
f[] = ;
for(int i = ;i <= maxn;i++)
{
if(!vis[i])
{
primes[++primeCnt] = i;
f[i] = ;
}
for(int j=;j <= primeCnt && (long long)i * primes[j] <= maxn;j++)
{
vis[i *primes[j]] = true;
if(i % primes[j] == )
{
f[i *primes[j]] = (i / primes[j] % primes[j] == )? : f[i/primes[j]];
break;
}
else f[i * primes[j]] = f[i] * ;
}
}
} int main()
{
seive();
for(int i = ;i <= maxn;i++) s[i] = s[i-]+f[i]; int T;
scanf("%d", &T);
while(T--)
{
scanf("%d", &n);
printf("%d\n", s[n]);
}
}
参考链接:https://oi.men.ci/jsk-30999/#%D0%B4%D0%B0%D0%BB%D0%B5%D0%B5
2018 南京网络预赛Sum - 线性筛的更多相关文章
- 2018 南京网络预赛Sum ——莫比乌斯反演
题意 设 $f(n)$ 为 $n=ab$ 的方案数,其中 $a,b$ 为无平方因子数.求 $\displaystyle \sum_{i=1}^nf(i)$,$n \leq 2e7$. 分析 显然,可 ...
- 2018 南京网络预赛Sum - 离线分段打表
题意 设 $f(n)$ 为 $n=ab$ 的方案数,其中 $a,b$ 为无平方因子数. 例如,$f(6)=4$,因为 $6 = 1 \times 6 = 2 \times 3 = 3 \times 2 ...
- ACM-ICPC 2018 南京赛区网络预赛 J题Sum(线性筛素数)
题目链接:https://nanti.jisuanke.com/t/30999 参考自博客:https://kuangbin.github.io/2018/09/01/2018-ACM-ICPC-Na ...
- 计蒜客 30999 - Sum - [找规律+线性筛][2018ICPC南京网络预赛J题]
题目链接:https://nanti.jisuanke.com/t/30999 样例输入258 样例输出814 题意: squarefree数是指不含有完全平方数( 1 除外)因子的数, 现在一个数字 ...
- ACM-ICPC 2018 南京赛区网络预赛 Sum
A square-free integer is an integer which is indivisible by any square number except 11. For example ...
- ACM-ICPC 2018 南京赛区网络预赛Sum,线性筛处理积性函数
SUM 题意:f(n)是n可以拆成多少组n=a*b,a和b都是不包含平方因子的方案数目,对于a!=b,n=a*b和n=b*a算两种方案,求∑i=1nf(i) 首先我们可以知道,n=1时f(1)=1, ...
- 2018 南京预选赛 J Sum ( 欧拉素数筛 、Square-free Number、DP )
题目链接 题意 : 定义不能被平方数整除的数为 Square-free Number 定义 F(i) = 有几对不同的 a 和 b 使得 i = a * b 且 a .b 都是 Square-free ...
- ACM-ICPC 2018 南京网络赛
题目顺序:A C E G I J L A. An Olympian Math Problem 打表,找规律,发现答案为n-1 C. GDY 题意: m张卡片,标号1-13: n个玩家,标号1-n:每个 ...
- 2018南京网络赛 - Skr 回文树
题意:求本质不同的回文串(大整数)的数字和 由回文树的性质可知贡献只在首次进入某个新节点时产生 那么只需由pos和len算出距离把左边右边删掉再算好base重复\(O(n)\)次即可 位移那段写的略微 ...
随机推荐
- qt qml中的Tabview使用心得
彩云之南的天是如此湛蓝,天上落下的水是如此清澈. 最近在qt5.5下使用TabView,如下. 1) currentIndex变量很好用,其对应当前被显示的tab,其值变化时还会触发onCurrent ...
- redis实战---读书笔记
第一章 初识redis redis 是一个远程内存数据库,性能强劲,具有复制特性以及为解决问题而生的独一无二的数据模型. 1. redis 简介 redis 是一种非关系型数据库(NOSQL) r ...
- 图数据库neo4j添加算法包
1. 从https://github.com/neo4j-contrib/neo4j-graph-algorithms/releases下载相应版本jar包,放到 C:\Users\Administr ...
- 【C++札记】命名空间(namespace)
介绍 命名空间可以解决程序中的同名冲突,尤其大型项目多人开发中经常用到.比如我们使用C++的标准输出std::cout就使用了std命名空间. 使用作用域符:: #include <iostre ...
- CSP-S初赛
初赛都过了好几天了,现在才想起来写点关于初赛的博客也真是...... 我是福建人,是在福建的赛点参加的CSP-S组的初赛,能力其实很弱,估分只能60多一点点.真是害怕一不小心这篇博客就变成了我的退役博 ...
- Django之ORM表操作
ORM表操作 1.ORM单表操作 首先想操作表的增删改查,需要先导入这个表,以之前创建的UserInfo表为例,在app下的views.py中导入 from app import models def ...
- docker 实践一:简介和安装
docker 的简介 docker 绝对是这几年来的重量级开源软件,它是使用 Go 实现的开源容器项目,分属于虚拟化技术. docker 和 虚拟机 docker 作为一种轻量级的虚拟化方式,在运行应 ...
- (转)从0移植uboot (二) _uboot启动流程分析
ref:https://www.cnblogs.com/xiaojiang1025/p/6496704.html 经过了上一篇的配置,我们已经执行make就可以编译出一个uboot.bin,但这还不够 ...
- 面试经典算法:马拉松算法,最长回文子串Golang实现
求一个字符串中最长的回文子串. package main import "fmt" /* 马拉松算法,求最长回文子串,时间复杂度:线性 */ func main() { // 回文 ...
- (二)手动配置第一个HelloWorld程序
上例的HelloWorld是由Android sutudio 自动生成的,现在我们手动来配置. 1. 重新创建工程 2. 创建空的Activity 生成的MainActivity.java 文件: p ...