HDU 5778 abs (数学+暴力枚举)

根据y的性质,容易想到 令y=z*z;则题目转化为求z(2<=z<1e9)。所以从sqrt(x)从左右开始枚举z,判断z是否符合要求。

显然,如果z是素数,一定是符合要求的。所以必定会在log1e9时间内找到一个符合要求的z。

在判断z是否符合要求(没有相同的质因子)时,可以先预处理出1e9所有可能的质因子(即sqrt(1e9)内的质数),然后如果z对于某个质因子可以连续整除2次,说明z不符合要求。

【代码】

/* ***********************************************
Author        :angon
************************************************ */
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;
#define REP(i,k,n) for(int i=k;i1) ans = min(ans,x-l*l);
        printf("%I64d\n",ans);
    }
    return 0;
}

你可能感兴趣的:(HDU 5778 abs (数学+暴力枚举))