ZJANS

b893. 勘根定理

Easy Last Update: 2026/01/22
數學

給 6 個整數 a, b, c, d, e, f
代表方程式 ax5+bx4+cx3+dx2+ex+f=0ax^{5} + bx^{4} + cx^{3} + dx^{2} + ex + f = 0
求此方程式的所有根分別介於哪兩個 連續 整數之間
若無限多組解輸出 Too many... = ="
若無實數解輸出 N0THING! >\\\<

40a,b,c,d,e,f40-40 \leq a, b, c, d, e, f \leq 40
所有輸出的數字 xx231<x6<231-2^{31} < x^{6} < 2^{31}

※ 無實數解輸出 N0THING! >\\\<\*3 )


解法一

因為題目保證 231<x6<231-2^{31} < x^{6} < 2^{31}
所以 xx 的範圍 2316<x<2316-2^{\frac{31}{6}} < x < 2^{\frac{31}{6}}
大約是 35.919<x<35.919-35.919 < x < 35.919
窮舉這個範圍的所有 連續整數 即可

題目要求輸出的字串含 "\
需要使用挑脫字元 \

✅ 完整代碼

評分結果(參考) : AC (3ms, 348KB)

#include<bits/stdc++.h>
#define int long long
using namespace std;

int a, b, c, d, e, f;

int g(int x){
    return a*pow(x, 5) + b*pow(x, 4) + c*pow(x, 3) + 
           d*pow(x, 2) + e*x + f;
}

signed main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    
    cin >> a >> b >> c >> d >> e >> f;
    if(a==0 && b==0 && c==0 && d==0 && e==0 && f==0){
        cout << "Too many... = =\"";
    }
    else{
        bool haveRoot = false;
        for(int i=-35; i<=35; i++){
            int f1=g(i), f2=g(i+1);
            if(f1*f2 < 0){
                cout << i << " " << i+1 << "\n";
                haveRoot = true;
            }
            else if(f1 == 0){
                cout << i << " " << i << "\n";
                haveRoot = true;
            }
        }
        if(!haveRoot) cout << "N0THING! >\\\\\\<";
    }
    
    return 0;
}