Jzoj4782 Math
2017-10-24 20:46
471 查看
若一个数x是平方数,则d(x)为平方数
所以就是要考虑有多少对i*j为平方数
我们假设,i=p*k^2,那么,j=p*q^2时,i*j为平方数(p不含平方因子,k,q为正整数)
所以,我们对于一个i=p*k^2,对应的j就有[√m/p]种
我们考虑快速求p,这样对于所有k,i=p*k^2的答案都是一样的,要么是1或-1
采用线性筛法,对于一个合法的p,我们可以筛掉p*k^2 ,这样时间复杂度是就是线性的
#include<stdio.h> #include<math.h> #define N 10000000 #define L long long bool vis[10000020]={0}; L n,m,ans=0; int main(){ scanf("%lld%lld",&n,&m); for(int i=1;i<=n;++i) if(!vis[i]){ int c=0; for(int j=1;i*j*j<=n;++j) vis[i*j*j]=1,++c; ans+=((int)sqrt(1.*m/i))&1?-c:c; } printf("%lld\n",ans); }
相关文章推荐
- NOIP提高组【JZOJ4782】Math
- 【JZOJ 4782】Math
- 【jzoj4782】【Math】【线性筛法】
- 【JZOJ4782】【NOIP2016提高A组模拟9.15】Math
- 【JZOJ4782】Math
- 【JZOJ 4782】 Math
- JZOJ 3736. 【NOI2014模拟7.11】数学题(math)
- 【JZOJ3736】【NOI2014模拟7.11】数学题(math)
- [数竞题(雾)][CodeChef]PARSIN/[JZOJ4704]Math
- JZOJ3736【NOI2014模拟7.11】数学题(math)
- jzoj1273 袁绍的刁难(math)
- Write a program that will help elementary school pupils practice math
- java.math.BigDecimal cannot be cast to java.lang.String
- Linux 0.12 OS. math - error.c
- goto、math.round、输出固定个数换行
- Python中的math和保留小数位数方法
- hdu 5974 A Simple Math Problem
- Math.Round是四舍五入还是五舍六入
- SDNU 1229.A math problem 最小生成树 prim算法