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

参考自博客https://kuangbin.github.io/2018/09/01/2018-ACM-ICPC-Nanjing-online-J/

题目中文

  • 1000毫秒
  • 512000K

无方形整数是一个整数,除了1以外的任何平方数都不可分 这个数。例如,6 = 2 *3,6=2*3,6是无方形整数,但12 = 2 ^ 2*3,,因为2 ^ 2是正方形数。有些整数可以分解为两个无方形整数的乘积,可能有多种分解方式。例如,6=1·6=6·1=2·3=3·2,n=a*bn=b*a被认为是不同的。)是分解方式的数量n=a*b。问题在于计算

输入

第一行包含一个整数 ,表示的测试用例的数量。

对于每个测试用例,第一行有一个整数

产量

对于每个测试用例,打印答案

暗示

样例输入复制

2
5
8

样例输出复制

8
14

 解题思路:首先我们对f(n)分析,我们知道对于任意一个数,我们都可以把他拆分成若干素因子乘积的形式如f(n)=p^x+q^y+……r^z,如果f(n)的素因子分解式子中,某个素因子的指数大于二,则f(n)就一定为0;比如f(8)=f(2^3)=0;

如果f(n)非0,则f(n)的素因子的指数只能为1或者2了,如果该素因子的指数为1,则对结果的贡献度为2(即其余素因子分成两部分,可加入任意一边),如果该素因子的指数为1,则对结果的贡献度为1(其余素因子分成两部分,一边一个);

所有如果单独求一个f(n)的话,只需要对n进行素因素分解。

但是现在需要求1∼2×10^7的f(n), 我们需要进行递推。

假如我们知道n的最小素因子是p的话,而且p的指数是x的话,即n=y*p^x.

那么很显然,如果x == 1, 那么f(n)=2×f(y), 如果x == 2, 那么f(n)=f(y), 如果x > 2, 那么f(n)=0.

然后这里就这要用线性筛素数了,而筛素数的同时记录每个最小的素因子。

附上代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll maxn=2e7;
int prime[maxn+],minprime[maxn+];
ll cnt[maxn+];
//线性筛素数
void getprime()
{
memset(prime,,sizeof(prime));
int tot=;
for(int i=;i<=maxn;i++)
{
if(!prime[i])
{
prime[tot++]=i;
minprime[i]=i;
}
for(int j=;j<tot&&i*prime[j]<=maxn;j++)
{
prime[i*prime[j]]=;
minprime[i*prime[j]]=prime[j];
if(i%prime[j]==)
break;
}
}
} int main()
{
getprime();
cnt[]=;
for(int i=;i<=maxn;i++)
{
int x=minprime[i]; //最小素因子
if(i%(x*x*x)==) cnt[i]=; //最小素因子指数大于2
else if(i%(x*x)==) cnt[i]=cnt[i/(x*x)]; //最小素因子指数等于2
else cnt[i]=*cnt[i/x]; //最小素因子指数为1
}
for (int i=;i<=maxn;i++)
cnt[i]+=cnt[i-];
int t;
scanf("%d",&t);
while(t--)
{
int n;
scanf("%d",&n);
printf("%lld\n",cnt[n]);
}
return ;
}

ACM-ICPC 2018 南京赛区网络预赛 J题Sum(线性筛素数)的更多相关文章

  1. 【ACM-ICPC 2018 南京赛区网络预赛 J】Sum

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 线性筛求出每个数的最小质因子x for 从1-n 对于i,它的最小质因子为x 考虑i=ab 如果i能被x^3整除 那么这x怎么分配给 ...

  2. ACM-ICPC 2018 南京赛区网络预赛 J.sum

    A square-free integer is an integer which is indivisible by any square number except 11. For example ...

  3. ACM-ICPC 2018 南京赛区网络预赛 E题

    ACM-ICPC 2018 南京赛区网络预赛 E题 题目链接: https://nanti.jisuanke.com/t/30994 Dlsj is competing in a contest wi ...

  4. 计蒜客 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 ...

  5. ACM-ICPC 2018 焦作赛区网络预赛J题 Participate in E-sports

    Jessie and Justin want to participate in e-sports. E-sports contain many games, but they don't know ...

  6. 线性素数筛 ACM-ICPC 2018 南京赛区网络预赛 J Sum

    https://www.jisuanke.com/contest/1555?view=challenges 题意: 题解:写完都没发现是个积性函数233 想法就是对x分解质因数,f(x)就是2^k,其 ...

  7. ACM-ICPC 2018 南京赛区网络预赛 J Sum (思维+打表)

    https://nanti.jisuanke.com/t/30999 题意 f(i)表示i能拆分成两个数的乘积,且要求这两个数中各自都没有出现超过1次的质因子的方案数.每次给出n,求∑(n,i=1)f ...

  8. ACM-ICPC 2018 南京赛区网络预赛 J.sum(欧拉筛)

    题目来源:https://nanti.jisuanke.com/t/A1956 题意:找一个数拆成无平方因子的组合数,然后求前缀和. 解题思路:我们可以把某个数分解质因数,如果某个数可以分解出三个相同 ...

  9. ACM-ICPC 2018 南京赛区网络预赛 - J. Sum (找规律+打表)

    题意:\(f(i):i\)能拆分成两个数的乘积,且要求这两个数中各自都没有出现超过1次的质因子.每次给出n,求\(\sum_{i=1}^{n}f(i)\) 分析:\(1 \le n \le 2e7\) ...

随机推荐

  1. rem移动端适配方案

    一. rem vs em 单位 定义 特点 rem font size of the root element 以根元素字体大小为基准 em font size of the element 以父元素 ...

  2. jquery操作复选框(checkbox)的一些小技巧总结

    1.获取单个checkbox选中项(三种写法) //第一种 $("input:checkbox:checked").val() //第二种 $("input:[type= ...

  3. Chrome 使用绿色版实现同一个机器 打开多个不同的chrome版本

    1. 之前找了一个方案能够实现 多个chrome版本的 同时安装 但是发现不是很好. 2. 最近的一个办法 就是使用chrome的绿色版来实现 3. 下载地址: https://www.chrome6 ...

  4. leetcode:Roman to Integer and Integer to Roman

    2015-06-03 罗马数字以前接触过I到VIII比较多,直到遇见这个题目才知道更详细.阿拉伯数字和罗马数字之间的转换最重的是了解罗马数字的规则. 罗马数字规则:(总结) 1, 罗马数字共有7个,即 ...

  5. Windows 10 & change DNS

    Windows 10 & change DNS https://www.windowscentral.com/how-change-your-pcs-dns-settings-windows- ...

  6. mysql第一天【mysqldump导出数据和mysql导入数据】

    1.使用mysqldump导出数据到本地sql文件 在mysql>bin下执行: 例如: mysqldump -hrm-2ze8mpi5i65429l1qvo.mysql.rds.aliyunc ...

  7. How to create DMG on macOS

    hdiutil create -srcfolder /users/test1/ -volname test1 /users/test/test1.dmg

  8. opencv imdecode和imencode用法

    主要是对内存数据自动编解码 string fname = "D:/image.jpg"; //! 以二进制流方式读取图片到内存 FILE* pFile = fopen(fname. ...

  9. hdu-3068(最长回文子串-manacher)

    题意:求一个字符串#include<iostream>#include<algorithm>#include<cstring>using namespace std ...

  10. maven + bat 实现快速编译打包模块代码

    pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="htt ...