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. treap树及相关算法

    #include "stdafx.h" #include <stdio.h> #include <stdlib.h> #include <string ...

  2. COM ,Threading Models,apartments,RPC

    Component Object Model (COM) https://msdn.microsoft.com/en-us/library/windows/desktop/ms680573%28v=v ...

  3. MUA

    a big deal analysis analytics cooperate 合作 efficient explicitly fine grained Granularity graph geogr ...

  4. Unity动画

    Unity 并没有自带建模工具. 3D建模工具 maya, 3dmax, blender Skinned Mesh Renderer Mesh Renderer Mesh Filter Modelli ...

  5. [unity3d程序] 纹理扩散

    纹理扩散适合与做游戏的背景(卷轴效果),原理就是让材质贴图动起来(循环运动),代码很简单希望对大家有用 1 2 3 4 5 6 7 8 9 10 11 12 13 // Scroll main tex ...

  6. Maximum number of WAL files in the pg_xlog directory (2)

    Jeff Janes: Hi, As part of our monitoring work for our customers, we stumbled upon an issue with our ...

  7. Sklearn库例子2:分类——线性回归分类(Line Regression )例子

    线性回归:通过拟合线性模型的回归系数W =(w_1,…,w_p)来减少数据中观察到的结果和实际结果之间的残差平方和,并通过线性逼近进行预测. 从数学上讲,它解决了下面这个形式的问题:      Lin ...

  8. 怎么解决ABBYY找不到_FRBatch.pac的问题

    ABBYY Screenshot Reader是ABBYY FineReader 12OCR文字识别软件中自带的一个插件,通常情况下与ABBYY FineReader 12一起安装到计算机中,它是一款 ...

  9. wikioi 2235 机票打折 【考查浮点数四舍五入的技巧】

    /*======================================================================== 2235 机票打折 题目描述 Descriptio ...

  10. android 实现拍照的2种方法

    android系统的照相功能,已实现2种方法,可供大家参考: 1.调用系统摄像头来拍照 首先,找到AndroidManifest.xml文件里加入用户权限 <uses-permission an ...