数(aqnum)

3.1 题目描述

秋锅对数论很感兴趣,他特别喜欢一种数字。秋锅把这种数字命名为 农数 ,英文名为 AQ number 。

这种数字定义如下:

定义 1 一个数 n 是农数,当且仅当对于每个质数 p ,要么 p ∤ n ,要么 p ≤ MAXPRIME

且存在一个 正奇数 k 使得 p k | n 且 p k+1 ∤ n 。

秋锅想知道,给定 N,MAXPRIME ,问 1 到 N 里面的农数有多少个呢?

3.2 输入格式

一行 2 个数,

分别为 N 和 MAXPRIME 。

3.3 输出格式

一行一个数,表示 1 到 N 中农数的个数。

3.4 样例输入

10 3

3.5 样例输出

5

3.6数据范围

对于 30% 的数据:N ≤ 1000

对于 60% 的数据:N ≤ 5 × 10^6

对于 100% 的数据:N ≤ 10^10 ,MAXPRIME ≤ 10^6

题解

搜索。怎么能想到它是搜索呐?

农数的因数满足小于等于maxprime,且指数为奇数,处理出小于等于maxprime的质数,枚举指数的情况,加一个剪枝,如果当前数*pri[i]^2>limit,停止搜索,二分一个最大的乘以当前数<=limi的质因子,答案加上这些质子,注意数据范围(最近总是忽略数据范围)。

写的时候,一直把upper_bound写成了lower_bound,傻傻分不清。

#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstdio>
using namespace std;
int pri[1000010];
long long sum=0,lim,ma,p;
bool o[1000010];
long long read()
{
long long ans=0,fu=1;char ch=getchar();
while(!isdigit(ch)) {if(ch=='-') fu=-1;ch=getchar();}
while(isdigit(ch)) {ans=ans*10+ch-'0';ch=getchar();}
return ans*fu;
}
void prime(int x)
{
p=0;
o[1]=1;
for(int i=2;i<=x;i++)
{
if(!o[i])
pri[++p]=i;
for(int j=1;j<=p&&pri[j]*i<=x;j++)
{
o[pri[j]*i]=1;
if(i%pri[j]==0)
break;
}
}
}
void search(long long x,int th) //x要开long long哦
{
if(th==p+1)
{
sum++;
return;
}
if(x*pri[th]>lim)
{
sum++;
return;
}
if(x*pri[th]*pri[th]>lim)
{
int pos=upper_bound(pri+1,pri+p+1,lim/x)-pri;
sum+=pos-th+1;
if(sum<0)
{
int debug=1;
}
return;
}
search(x,th+1);
for(int i=0;;i++)
{
if(x>lim)
return;
if(i&1)
search(x,th+1);
x*=pri[th];
}
}
int main()
{
freopen("aqnum.in","r",stdin);
freopen("aqnum.out","w",stdout);
lim=read(),ma=read();
prime(ma);
search((long long)1,1);
printf("%lld",sum);
return 0;
}

最新文章

  1. Java_通过反射调用类中的方法
  2. HTML语义化:HTML5的新标签及IE5.5~9的部分兼容方案
  3. Pyqt 音视频播放器
  4. JAVA生成带Logo的二维码
  5. 复习练习(03)jquery Css方法一步步升级
  6. jQuery工具函数
  7. 【Android开发学习笔记】【第一课】初识New Project,工程文件介绍
  8. MyEclipse8.5集成Tomcat7
  9. oracle-asm,acfs
  10. spring ioc原理(看完后大家可以自己写一个spring)
  11. H264转成RGB24格式-2016.01.21
  12. C puzzles详解【38-45题】
  13. hbase安装配置(整合到hadoop)
  14. hql中的in查询
  15. Django 表单校验 表单字段设置 自定义表单校验规则
  16. Navicat Premium 简体中文版 12.0.16 以上版本国外官网下载地址(非国内)
  17. C# Note32: 查漏补缺
  18. Codeforces Round #499 (Div. 2) C Fly题解
  19. [转]OpenGL 使用 PBO 高速复制屏幕图像到内存或者纹理中
  20. docker 原理

热门文章

  1. history-之前发生了什么
  2. 使用Cmder 安装 Composer 出现 &quot;attempt to call a nil value&quot;
  3. centos下nginx无法加载php文件,404
  4. webpack学习之—— Manifest
  5. Hdu 1299
  6. LintCode_181 将整数A转换为B
  7. 当inline-block和text-indent遇到IE6,IE7
  8. Mac上homebrew使用
  9. 每日算法之三十四:Multiply Strings
  10. Python datetime模块的其他方法