【jzoj4782】【Math】【线性筛法】
2016-09-23 21:29
337 查看
题目大意
解题思路
这里有一个小小的结论,只有i*j是完全平方数时d是奇数,可以求出i的非完全平方因子p,奇数的个数即为m/p−−−−√,p可以用线筛来预处理。
code
#include<set> #include<cmath> #include<cstdio> #include<cstring> #include<algorithm> #define LF double #define LL long long #define max(a,b) ((a>b)?a:b) #define min(a,b) ((a>b)?b:a) #define fo(i,j,k) for(int i=j;i<=k;i++) #define fd(i,j,k) for(int i=j;i>=k;i--) using namespace std; int const maxn=10000000,inf=2147483647; LL n,m,ss[maxn+10],tag[maxn+10],p[maxn+10]; int main(){ freopen("d.in","r",stdin); freopen("d.out","w",stdout); scanf("%lld%lld",&n,&m); p[1]=1; fo(i,2,n){ if(!tag[i]){ ss[++ss[0]]=i; p[i]=i; } for(int j=1;(j<=ss[0])&&(1ll*ss[j]*i<=n);j++){ tag[ss[j]*i]=1; if(p[i]%ss[j]==0)p[ss[j]*i]=p[i]/ss[j]; else p[ss[j]*i]=p[i]*ss[j]; if(i%ss[j]==0)break; } } LL ans=0; fo(i,1,n) if((LL)sqrt(m/p[i])%2==1)ans--; else ans++; printf("%lld",ans); return 0; }
相关文章推荐
- 【JZOJ4782】【NOIP2016提高A组模拟9.15】Math
- 2016 UESTC Training for Math F - 粗心的谭爷 素数线性筛法的推广
- Jzoj4782 Math
- 【JZOJ 4782】 Math
- 【JZOJ4782】Math
- 【JZOJ 4782】Math
- NOIP提高组【JZOJ4782】Math
- 【jzoj4860】【分解数】【线性筛法】
- poj2478 Farey Sequence(线性筛法+欧拉函数+递推)
- 线性筛素数的欧拉筛法
- 线性筛法,留着复习
- bzoj3309 DZY Loves Math(线性筛+反演)
- Math_矩阵和线性代数
- 线性筛法 与 线性求欧拉函数 的计算模板
- 线性筛法(欧拉筛法)
- UVA11426 FZU1969 51NOD1188 线性欧拉筛法+筛法
- 线性筛法(欧拉筛)
- 数学_线性筛法建立素数表(HDU_1262)
- JZOJ 3736. 【NOI2014模拟7.11】数学题(math)
- [数竞题(雾)][CodeChef]PARSIN/[JZOJ4704]Math