题目描述

输入

输出

样例输入

3 5

样例输出

-1

数据范围

解法

观察式子,可以得知整个式子与d(i*j)的奇偶性有关。

d(n)为奇数当且仅当n是完全平方数。

对于一个i,如果d(i*j) (j∈[1,m])有奇数个完全平方数,那么d的和即为奇数,则贡献为-1;否则为1。

那么我们考虑如何求d(i*j)有多少个奇数,也即有多少个完全平方数。


我们设i=k∗q2(q极大,q,k均为整数);

如果我们要使i*j是完全平方数,那么j必须满足j=k∗p2(p极大,p,k均为整数);

因为j必须要使i中的因子k也变为平方因子,j中就必须有k这个因子。

然后,i*j的完全平方数就有mk−−√个。

那么问题就在于如何快速求出对于每个i的k。


设k(i)是对于i的所谓的k;

考虑线性筛法;

设j是i的一个质因数。

如果i|k(j/i),那么k(i)=k(j/i)/i;否则k(i)=k(j/i)*i。

边界是k(1)=1,k(p)=p(p为素数)。

那么就可以用线性筛法O(n)完成对k的求解了。

代码

#include<iostream>
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<algorithm>
#define ll long long
#define ln(x,y) int(log(x)/log(y))
#define sqr(x) ((x)*(x))
using namespace std;
const char* fin="aP1.in";
const char* fout="aP1.out";
const int inf=0x7fffffff;
const int maxn=10000007;
ll n,m,i,j,k,ans,tmp,tmd;
ll yue[maxn],b[maxn];
bool bz[maxn];
int main(){
scanf("%lld%lld",&n,&m);
b[1]=1;
for (i=2;i<=n;i++){
if (!bz[i]){
yue[++yue[0]]=i;
b[i]=i;
}
for (j=1;j<=yue[0];j++){
if (yue[j]*i>n) break;
bz[yue[j]*i]=true;
if (b[i]%yue[j]==0) b[yue[j]*i]=b[i]/yue[j];
else b[yue[j]*i]=b[i]*yue[j];
if (i%yue[j]==0) break;
}
}
for (i=1;i<=n;i++){
if ((ll)sqrt(m/b[i])%2==0) ans++;
else ans--;
}
printf("%lld",ans);
return 0;
}

启发

1.非常重要的是在于问题的转化;

2.考虑完全平方数的时候,要把i拆成k∗p2的形式。

3.线筛的运用。

线筛的性质

每个数i都会由它的最小质因数来筛除。

也即i=p*j(p是i的最小质因数)。

性质

每个数被筛且只被筛一次,也就是所谓O(n)复杂度的原因。

证明

假设这个数i由x1,x2两个质因数来筛除,且x1<x2。

也即i=x1∗j,i=x2∗k;

那么x1必须不能整除k,否则当循环x1*k的时候会break。

所以无论k和x2里面都没有x1这个质因数,k*x2也不会有x1这个质因数。

与假设矛盾。

所以i被筛且只被筛一次。

应用

1.求素数。

2.如果函数f(x)可以由f(x/p) (p是质数)O(1)转移,那么f(x)能够用线筛O(n)求解。大概积性函数的线筛求解也是这个道理。

【JZOJ4782】【NOIP2016提高A组模拟9.15】Math的更多相关文章

  1. NOIP2016提高A组模拟10.15总结

    第一题,就是将原有的式子一步步简化,不过有点麻烦,搞了很久. 第二题,枚举上下边界,维护一个单调队列,二分. 比赛上没有想到,只打了个暴力,坑了80分. 第三题,贪心,最后的十多分钟才想到,没有打出来 ...

  2. 【NOIP2016提高A组模拟10.15】打膈膜

    题目 分析 贪心, 先将怪物按生命值从小到大排序(显然按这个顺序打是最优的) 枚举可以发对少次群体攻击, 首先将所有的群体攻击发出去, 然后一个一个怪物打,当当前怪物生命值大于2,如果还有魔法值就放重 ...

  3. 【NOIP2016提高A组模拟10.15】最大化

    题目 分析 枚举两个纵坐标i.j,接着表示枚举区域的上下边界, 设对于每个横坐标区域的前缀和和为\(s_l\),枚举k, 显然当\(s_k>s_l\)时,以(i,k)为左上角,(j,k)为右下角 ...

  4. 【NOIP2016提高A组模拟10.15】算循环

    题目 分析 一步步删掉循环, 首先,原式是\[\sum_{i=1}^n\sum_{j=1}^m\sum_{k=i}^n\sum_{l=j}^m\sum_{p=i}^k\sum_{q=j}^l1\] 删 ...

  5. 【NOIP2016提高A组模拟9.15】Map

    题目 分析 发现,当原图是一棵树的时候,那么新建一条边后,就会变成环套树, 而环内的所有点对都是安全点对,如果环中有k个点,答案就是\(k(k-1)\) 联想到,当把原图做一遍tarjan缩点,每个环 ...

  6. 【NOIP2016提高A组模拟9.15】Osu

    题目 分析 考虑二分答案, 二分小数显然是不可取的,那么我们将所有可能的答案求出来,记录在一个数组上,排个序(C++调用函数很容易超时,手打快排,时间复杂度约为\(O(>8*10^7)\),但相 ...

  7. 【NOIP2016提高A组模拟9.15】Math

    题目 分析 因为\((-1)^2=1\), 所以我们只用看\(\sum_{j=1}^md(i·j)\)的值模2的值就可以了. 易证,一个数x,只有当x是完全平方数时,d(x)才为奇数,否则为偶数. 那 ...

  8. 【NOIP2016提高A组模拟8.15】Garden

    题目 分析 其实原题就是[cqoi2012][bzoj2669]局部极小值. 有一个n行m列的整数矩阵,其中1到nm之间的每个整数恰好出现一次.如果一个格子比所有相邻格子(相邻是指有公共边或公共顶点) ...

  9. 【NOIP2016提高A组模拟8.15】Throw

    题目 分析 首先对于一个状态(a,b,c),假定a<=b<=c: 现在考虑一下这个状态,的转移方案: \[1,中间向两边跳(a,b,c)-->(a*2-b,a,c).(a,b,c)- ...

随机推荐

  1. struts1 总结吧

    以前都是使用struts2,但是新公司要使用struts1,所有只有硬着头皮上了. 一.Dynamic Method Invoc : 自定义的 Action 必须继承 DispatchAction 而 ...

  2. sql server 获取指定格式的当前日期

    使用sqlserver日期函数中的getdate()可以获取当现的日期,下面就将为您介绍这种使用sqlserver日期函数获取当前日期的方法. 但是如果我们只需要得到当前的日期,不需要时间部分,或者不 ...

  3. 转载 ASP.NET SignalR 与LayIM配合,轻松实现网站客服聊天室(一) 整理基础数据

    ASP.NET SignalR 与LayIM配合,轻松实现网站客服聊天室(一) 整理基础数据   最近碰巧发现一款比较好的Web即时通讯前端组件,layim,百度关键字即可,我下面要做的就是基于这个前 ...

  4. HashMap基础知识

    HashMap 简介 HashMap 主要用来存放键值对,它基于哈希表的Map接口实现,是常用的Java集合之一. JDK1.8 之前 HashMap 由 数组+链表 组成的,数组是 HashMap ...

  5. InnoDB: Error number 24 means ‘Too many open files’

    一.问题的描述 备份程序 执行前滚的时候报错.(-apply-log) InnoDB: Errornumber 24 means 'Too many open files'. InnoDB: Some ...

  6. Shell脚本编程中截取字符串方法

    例如: 假设变量var=http://www.baidu.com/111.png 1.#号截取(删左留右) echo ${var#*//} # 号是运算符,*// 表示从左边开始删除第一个 // 号及 ...

  7. Redis源码解析:16Resis主从复制之主节点的完全重同步流程

    主从复制过程中,主节点根据从节点发来的命令执行相应的操作.结合上一章中讲解的从节点在主从复制中的流程,本章以及下一篇文章讲解一下主节点在主从复制过程中的流程. 本章主要介绍完全重同步流程. 一:从节点 ...

  8. spring源码学习之springMVC(一)

    个人感觉<Spring技术内幕:深入解析Spring架构与设计原理(第2版)>这本书对spring的解读要优于<Spring源码深度解析(第2版)>这本书的,后者感觉就是再陈述 ...

  9. (5)连续非周期信号的傅里叶变换(频谱) & 周期信号的傅里叶变换

    参考资料:<信号与系统(第二版)> 杨晓非 何丰 从傅里叶级数到傅里叶变换 通过分析连续周期信号的周期与频谱的关系,当周期趋于无穷大的时候,周期信号变成非周期信号.从频谱分析观点来看,当T ...

  10. pc端样式重置以及常用样式规范class

    //reset html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a ...