题目链接:https://nanti.jisuanke.com/t/30999

样例输入
2
5
8

样例输出
8
14

题意:

squarefree数是指不含有完全平方数( 1 除外)因子的数,

现在一个数字 $n$,可以表示成两个squarefree数 $a,b$ 相乘,即 $n = ab$,

假设 $f\left( n \right)$ 代表了 $n$ 分解成不同的数对 $\left( {a,b} \right)$ 的个数,

现在给你一个 $n$,要求 $f\left( 1 \right) + f\left( 2 \right) + \cdots + f\left( n \right)$。

题解:

不难发现,若 $n$ 含有一个因子是立方数乃至更高次方数,则此时 $f\left( n \right) = 0$,例如 $f\left( {2^3 \times 3} \right) = 0,f\left( {3^4 } \right) = 0$;

则剩下来的数,因子最多就是平方数,不妨举些例子来看每个因子能提供多少贡献:

最开始是 $f\left( 1 \right) = 1$,因为只有 $1 = 1 \times 1$,然后我们给它乘上一些因子……

  1、乘上指数为 $1$ 的因子,例如 $f\left( {1 \times 2} \right)$,加进来的 $2$ ,可以添加在原来$1 \times 1$的乘号左边($2 \times 1$),也可以添加在右边($1 \times 2$),所以贡献了“$\times 2$”,即 $f\left( {1 \times 2} \right) = f\left( 1 \right) \times 2$;

  2、乘上指数为 $2$ 的因子,例如 $f\left( {1 \times 2^2 } \right)$,加进来的 $2^2$,它不能全部添加在某一边,只能拆开来,一半添加在乘号左边,一半添加在乘号右边,即$2 \times 2$,所以贡献了“$\times 1$”,即 $f\left( {1 \times 2^2} \right) = f\left( 1 \right) \times 1$。

那么依次类推,再在后面乘上一些因子,同样的道理,指数为 $1$ 则贡献为“$\times 2$”,指数为 $2$ 则贡献为“$\times 1$”。

很容易的就能得到递推规律:假设 $n$ 的最小素因子是 $p$,则有 $n = m \times p^x$,我们分两种情况讨论:

  1、$x = 1$,$p$ 的贡献为“$\times 2$”,就有 $f\left( n \right) = f\left( m \right) \times 2$;

  2、$x = 2$,$p$ 的贡献为“$\times 1$”,就有 $f\left( n \right) = f\left( m \right)$;

那么,现在的关键就是求得 $1$ 到 $2 \times 10^7$ 的每个数字的最小素因子,线性筛素数的时候可以顺带求出。

AC代码:

#include<bits/stdc++.h>
using namespace std; const int maxn=2e7+;
const int MAX=2e7; int n;
int mpf[maxn]; //存储最小素因子 /************************** 线性筛 - st **************************/
int prime[maxn];
bool isPrime[maxn];
void Screen() //欧拉筛法求素数
{
register int cnt=;
memset(isPrime,,sizeof(isPrime));
isPrime[]=isPrime[]=;
for(int i=;i<=MAX;i++)
{
if(isPrime[i]) prime[cnt++]=i, mpf[i]=i;
for(int j=;j<cnt;j++)
{
if(i*prime[j]>MAX) break;
isPrime[i*prime[j]]=, mpf[i*prime[j]]=prime[j];
if(i%prime[j]==) break;
}
}
}
/************************** 线性筛 - ed **************************/ long long f[maxn]; int main()
{
Screen(); f[]=;
for(int i=;i<=MAX;i++)
{
int mm = mpf[i];
if((long long)mm*mm < MAX && (long long)mm*mm*mm < MAX && i%(mm*mm*mm) == ) f[i]=;
else if((long long)mm*mm < MAX && i%(mm*mm) == ) f[i]=f[i/mm/mm];
else f[i]=*f[i/mm];
}
for(int i=;i<=MAX;i++) f[i]+=f[i-]; int T;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
printf("%lld\n",f[n]);
}
}

计蒜客 30999 - Sum - [找规律+线性筛][2018ICPC南京网络预赛J题]的更多相关文章

  1. 计蒜客 31001 - Magical Girl Haze - [最短路][2018ICPC南京网络预赛L题]

    题目链接:https://nanti.jisuanke.com/t/31001 题意: 一带权有向图,有 n 个节点编号1~n,m条有向边,现在一人从节点 1 出发,他有最多 k 次机会施展魔法使得某 ...

  2. 计蒜客 30994 - AC Challenge - [状压DP][2018ICPC南京网络预赛E题]

    题目链接:https://nanti.jisuanke.com/t/30994 样例输入: 5 5 6 0 4 5 1 1 3 4 1 2 2 3 1 3 1 2 1 4 样例输出: 55 样例输入: ...

  3. 计蒜客 31451 - Ka Chang - [DFS序+树状数组][2018ICPC沈阳网络预赛J题]

    题目链接:https://nanti.jisuanke.com/t/31451 Given a rooted tree ( the root is node $1$ ) of $N$ nodes. I ...

  4. 计蒜客 30996 - Lpl and Energy-saving Lamps - [线段树][2018ICPC南京网络预赛G题]

    题目链接:https://nanti.jisuanke.com/t/30996 During tea-drinking, princess, amongst other things, asked w ...

  5. 计蒜客 30990 - An Olympian Math Problem - [简单数学题][2018ICPC南京网络预赛A题]

    题目链接:https://nanti.jisuanke.com/t/30990 Alice, a student of grade 6, is thinking about an Olympian M ...

  6. 计蒜客 30999.Sum-筛无平方因数的数 (ACM-ICPC 2018 南京赛区网络预赛 J)

    J. Sum 26.87% 1000ms 512000K   A square-free integer is an integer which is indivisible by any squar ...

  7. ACM-ICPC 2018 南京赛区网络预赛 J题Sum(线性筛素数)

    题目链接:https://nanti.jisuanke.com/t/30999 参考自博客:https://kuangbin.github.io/2018/09/01/2018-ACM-ICPC-Na ...

  8. 【找规律】计蒜客17118 2017 ACM-ICPC 亚洲区(西安赛区)网络赛 E. Maximum Flow

    题意:一张有n个点的图,结点被编号为0~n-1,i往所有编号比它大的点j连边,权值为i xor j.给你n,问你最大流. 打个表,别忘了把相邻两项的差打出来,你会发现神奇的规律……你会发现每个答案都是 ...

  9. 【推导】计蒜客17116 2017 ACM-ICPC 亚洲区(西安赛区)网络赛 C. Sum

    题意:S(x)被定义为x的十进制表示下的数位之和.给你x,让你找一个正整数k,使得S(kx)能被233整除.k不超过2千位. 由于x不超过1000000,不论x是多少,10000000重复233次一定 ...

随机推荐

  1. faster-rcnn原理及相应概念解释

    R-CNN --> FAST-RCNN --> FASTER-RCNN R-CNN: (1)输入测试图像: (2)利用selective search 算法在图像中从上到下提取2000个左 ...

  2. 8 -- 深入使用Spring -- 7...2 MVC框架与Spring整合的思考

    8.7.2 MVC 框架与Spring整合的思考 对于一个基于B/S架构的JAVA EE 应用而言,用户请求总是向MVC框架的控制器请求,而当控制器拦截到用户请求后,必须调用业务逻辑组件来处理用户请求 ...

  3. 在SSH框架中,如何得到POST请求的URL和参数列表

    在做项目的API通知接口的时候,发现在SSH框架中无法获取到对方服务器发来的异步通知信息.最后排查到的原因可能是struts2对HttpServletRequest进行了二次处理,那么该如何拿到pos ...

  4. 个人成长|荣获CNVD年度最有价值漏洞奖

    本文共750+字,预计阅读2-3分钟. 前几天,很荣幸受主办方邀请,还拿了CNVD的一个“年度最有价值漏洞奖”,说一说,这几天的故事吧. 11月20号,意外收到一个会议邀请,当时还比较诧异,印象中我在 ...

  5. Web暴力破解--前端JS表单加密进行爆破

    0x01 前言 常见的js实现加密的方式有:md5.base64.shal,写了一个简单的demo作为测试. 0x02 代码 login.html <!DOCTYPE HTML> < ...

  6. sine曲线向前运动

    using UnityEngine; using System.Collections; public class sineWork : MonoBehaviour { float verticalS ...

  7. 据库分库分表(sharding)系列(一) 拆分实施策略和示例演示

    本文原文连接: http://blog.csdn.net/bluishglc/article/details/7696085 ,转载请注明出处!本文着重介绍sharding切分策略,如果你对数据库sh ...

  8. 处理i18n国际电话区号的代码实践

    本文转载至 http://adad184.com/2015/08/18/practice-in-i18n-dialling-code/ 前言 上周在忙产品的国际化(i18n)的问题 其中一个很重要的地 ...

  9. IDEA 单元测试 导入JUnit4到项目

    一.IDEA自带JUnit4的jar包,现在让我们来导入. Step 1. IDEA最上面一栏的菜单栏中,选File->Project Structure(从上往下第11个),弹出窗口左边有一个 ...

  10. Linux平台下mysql的ODBC配置方法

    在安装配置之前, 需要先大概了解一下MyODBC的架构. MyODBC体系结构建立在5个组件上,如下图所示: Driver Manager: 负责管理应用程序和驱动程序间的通信, 主要功能包括: 解析 ...