abs

题意:

问题描述

给定一个数x,求正整数y,使得满足以下条件:

1.y-x的绝对值最小

2.y的质因数分解式中每个质因数均恰好出现2次。

输入描述

第一行输入一个整数T

每组数据有一行,一个整数x

输出描述

对于每组数据,输出一行y-x的最小绝对值

输入样例

5

1112

4290

8716

9957

9095

输出样例

23

65

67

244

70

题解:

由于y质因数分解式中每个质因数均出现2次,那么y是一个完全平方数,设y=z*z,题目可转换成求z,使得每个质因数出现1次. 我们可以暴力枚举z,检查z是否符合要求,显然当z是质数是符合要求,由素数定理可以得,z的枚举量在logn级别 。

上面是官方题解,再说我的理解:首先看范围是1e18,不好弄,但题里又说y的质因子出现2次,故想到要根号降到1e9,这样就可以素数筛 根号1e9 内的素数了,这样就可以判断在1e9内某个数是否为素数了。之后枚举就好了,题里说y-x的绝对值,所以前后都枚举,有一个符合条件的记录,然后break就好了,PS:向前枚举到2就可以了,因为题里说y>=2。

再说下怎么判断z,也就是我写的ok函数,就直接把 根号1e9 内素数循环一次就好了,如果可以取余0 就/=,之后在判断这个是否还是取余0,如果还是就不符合,因为要求z的质因数都只出现1次。当最后/=为1的时候就可以返回真了,最后如果一次取余==0都没有,就证明这是素数,所以也返回真。

代码:

#include <bits/stdc++.h>
using namespace std; typedef long long ll;
const int INF=0x3f3f3f3f;
const ll LINF=0x3f3f3f3f3f3f3f3f;
#define PU puts("");
#define PI(A) cout<<A<<endl
#define SI(N) cin>>N
#define SII(N,M) cin>>N>>M
#define cle(a,val) memset(a,(val),sizeof(a))
#define rep(i,b) for(int i=0;i<(b);i++)
#define Rep(i,a,b) for(int i=(a);i<=(b);i++)
#define reRep(i,a,b) for(int i=(a);i>=(b);i--)
#define dbg(x) cout <<#x<<" = "<<x<<endl
#define PIar(a,n) rep(i,n)cout<<a[i]<<" ";cout<<endl;
#define PIarr(a,n,m) rep(aa,n){rep(bb, m)cout<<a[aa][bb]<<" ";cout<<endl;}
const double EPS= 1e-9 ; /* ///////////////////////// C o d i n g S p a c e ///////////////////////// */ const int MAXN= 40000 + 9 ; int prime[MAXN],K;
bool is_prime[MAXN];
int sieve(int n)
{
int p=0;
for (int i=0;i<=n;i++) is_prime[i]=true;
is_prime[1]=is_prime[0]=false;
for (int i=2;i<=n;i++)
{
if (is_prime[i])
{
prime[p++]=i;
for (int j=2*i;j<=n;j+=i) is_prime[j]=false;
}
}
return p;
}
bool ok(ll x)
{
bool f=0;
rep(i,K)
{
if (x%prime[i]==0)
{
f=1;
x/=prime[i];
if (x%prime[i]==0)
return false;
if (x==1) return true;
}
}
if (!f) return true;
}
int main()
{
iostream::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
K=sieve(MAXN);
int o;
SI(o);
while(o--)
{
ll x;
SI(x);
ll sqx=sqrt(x);
ll mi=LINF,ma=LINF;
for (int i=sqx+1;i<1e9+9;i++)
{
if (ok(i))
{
ma=i;
break;
}
}
for (int i=sqx;i>=2;i--)
{
if (ok(i))
{
mi=i;
break;
}
}
PI(min(llabs(ma*ma-x),llabs(mi*mi-x)));
}
return 0;
}

BestCoder Round #85 hdu5778 abs(素数筛+暴力)的更多相关文章

  1. Bestcoder round 18---A题(素数筛+素数打表+找三个素数其和==n)

    Primes Problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  2. HDU 5778 abs (BestCoder Round #85 C)素数筛+暴力

    分析:y是一个无平方因子数的平方,所以可以从sqrt(x)向上向下枚举找到第一个无平方因子比较大小 大家可能觉得这样找过去暴力,但实际上无平方因子的分布式非常密集的,相关题目,可以参考 CDOJ:无平 ...

  3. BestCoder Round #85(ZOJ1569尚未验证)

    A题 子序列和啊,就要想到前缀和的差.这个转换一定要!记着!那么i到j的一段子序列和Sij%m ==  0就等价于(Sj-Si-1)%m == 0 了,那么什么意思呢?就是如果有两段前缀和%m的模是一 ...

  4. BestCoder Round #85

    sum Accepts: 640 Submissions: 1744 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/13107 ...

  5. BestCoder Round #85 A B C

    本来没有写博客的打算,可是看完了题解感觉这三道题这么水,我却只做出来一道,实在不应该,还是写点东西吧…… A.sum 问题描述 给定一个数列,求是否存在连续子列和为m的倍数,存在输出YES,否则输出N ...

  6. SDUT 3002-素数间隙(素数筛+暴力)

    素数间隙 Time Limit: 1000ms   Memory limit: 262144K  有疑问?点这里^_^ 题目描写叙述 Neko猫是一个非常喜欢玩数字游戏的会说话的肥猫,常常会想到非常多 ...

  7. BestCoder Round #85 前三题题解

    sum Accepts: 822 Submissions: 1744 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/13107 ...

  8. BestCoder Round #85 hdu5777 domino

    domino 题意: 问题描述 小白在玩一个游戏.桌子上有n张多米诺骨牌排成一列.它有k次机会,每次可以选一个还没有倒的骨牌,向左或者向右推倒.每个骨 牌倒下的时候,若碰到了未倒下的骨牌,可以把它推倒 ...

  9. BestCoder Round #85 hdu5776 sum

    sum 题意: 问题描述 给定一个数列,求是否存在连续子列和为m的倍数,存在输出YES,否则输出NO 输入描述 输入文件的第一行有一个正整数T,表示数据组数. 接下去有T组数据,每组数据的第一行有两个 ...

随机推荐

  1. Vue.js相关知识3-路由

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  2. mysql修改列名和列类型

    MySQL中修改列名或列的数据类型 (2012-04-03 08:59:25) 转载▼ 标签: mysql 修改列名 修改列数据类型 it 分类: 数据库 参考下面链接中的语法 http://dev. ...

  3. 在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke 解决办法

    增加IsHandleCreated 判断 if (this.IsHandleCreated) { this.Invoke(new EventHandler(delegate { ...... })); ...

  4. Java——函数

     ------- <a href="http://www.itheima.com" target="blank">android培训</a ...

  5. Nginx-server_name匹配规则

    server_name可为IP/domain/localhost/null等任何字符串(字符串server_name也可以用来匹配),注意各个 server 块的顺序. 1.如果只有一个server, ...

  6. linux -redhat rpm 和zabbix和各种rpm包下载地址

    redhat ftp://ftp.redhat.com/pub/redhat/linux/enterprise/6Client/en/os/SRPMS/ zabbix https://sourcefo ...

  7. python时间处理之datetime

    python时间处理之datetime 标签: pythondateimportstringc 2012-09-12 23:21 20910人阅读 评论(0) 收藏 举报  分类: Python系列( ...

  8. WCF入门教程三[WCF的宿主]

    一.WCF服务应用程序与WCF服务库 我们在平时开发的过程中常用的项目类型有“WCF 服务应用程序”和“WCF服务库”. WCF服务应用程序,是一个可以执行的程序,它有独立的进程,WCF服务类契约的定 ...

  9. C#实现通过模板自动创建Word文档的方法

    原文地址:http://www.jb51.net/article/55332.htm   本文实例讲述了C#实现通过模板自动创建Word文档的方法,是非常实用的技巧.分享给大家供大家参考.具体实现方法 ...

  10. media type与media query

    media type(媒体类型)是css 2中的一个非常有用的属性,通过media type我们可以对不同的设备指定特定的样式,从而实现更丰富的界面.media query(媒体查询)是对media ...