HDU --- 5778 abs 【枚举平方数 + 思维】
2017-08-11 18:54
316 查看
传送门
//题意 : 给定一个x, 求与x相距最近的一个数y, 且y的每种素因子个数恰好只有2个.
//思路 : 因为y的每种素因子恰好只有两个, 那么y一定是一个平方数, 那么我们可以对x(因为和y很近)进行开根, 然后判断它的每种素因子是否恰好为一个, 如果不是这个数就不行. 否则就符合. 并且是对x开根后的两边枚举. 然后取一个绝对值小的就行了. 复杂度在O(1e3)左右.
AC Code
//题意 : 给定一个x, 求与x相距最近的一个数y, 且y的每种素因子个数恰好只有2个.
//思路 : 因为y的每种素因子恰好只有两个, 那么y一定是一个平方数, 那么我们可以对x(因为和y很近)进行开根, 然后判断它的每种素因子是否恰好为一个, 如果不是这个数就不行. 否则就符合. 并且是对x开根后的两边枚举. 然后取一个绝对值小的就行了. 复杂度在O(1e3)左右.
AC Code
/** @Cain*/ #define ll long long int bool check(ll x) //检查x的每一种素因子是否只有一个 { for(int i=2;i*i<=x;i++){ if(x%i == 0){ x /= i; if(x%i == 0) return false; } } return true; } void solve() { ll n; cin >> n; ll x = sqrt(n); ll i,j; bool flag=false; for(i=x;i>=4;i--){ //向下枚举 if(check(i)){ flag = true; break; } } for(j=x+1;;j++){ //向上枚举 if(check(j)) break; } ll res = abs(n-j*j); if(flag) res = min(res,n-i*i); cout << res << endl; }
相关文章推荐
- hdu 5778 abs(分解质因子,枚举平方数,数论)
- 【HDU】5778 - abs(思维)
- HDU-5778-abs【思维】
- hdu 5778 abs【暴力枚举】
- hdu 5778 abs
- HDU-5778 abs
- HDU 5778 abs
- hdu 5778 abs (数论)
- HDU 5778 abs(暴力枚举)——BestCoder Round #85 1003
- HDU 5778(abs 暴力)
- HDU 5778 abs
- hdu-5778 abs(暴力枚举)
- Hdu 5778 abs (暴力/二分)
- HDU-5778 abs(数论)
- HDU 5778 abs(数论)
- HDU 5778 abs 数学
- HDU 5778 abs (枚举)
- HDU 5778 abs (BestCoder Round #85 C)素数筛+暴力
- HDU 5778 abs (数学+暴力枚举)
- HDU 5778 abs (素数,暴力)