#include <iostream>          //id=240242103
#include <cmath> 
#include <iomanip>
using namespace std;
 
// Horner's rule to evaluate f(x)
double horner(double coeff[], int n, double x) {
    double result = coeff[n];
    for (int i = n - 1; i >= 0; i--)
        result = result * x + coeff[i];
    return result;
}
 
int main() {
    int degree;
    cout << "Enter the degree of the polynomial: ";
    cin >> degree;
 
    double coeff[degree + 1];
    for (int i = 0; i <= degree; i++) {
        cout << "x^" << i << "::";
        cin >> coeff[i];
    }
 
    double x1, x2, tol;
    cout << "Enter first initial guess x1: ";
    cin >> x1;
    cout << "Enter second initial guess x2: ";
    cin >> x2;
    cout << "Enter tolerance: ";
    cin >> tol;
 
    double f1 = horner(coeff, degree, x1);
    double f2 = horner(coeff, degree, x2);
    double x3, f3;
    int iter = 0;
 
    cout << fixed << setprecision(6);
    cout << "Iteration  x1        x2        x3        f(x3)\n";
    cout << "--------------------------------------------\n";
 
    do {
        x3 = (f2 * x1 - f1 * x2) / (f2 - f1); // Secant formula
        f3 = horner(coeff, degree, x3);
 
        iter++;
        cout << iter << "\t" << x1 << "\t" << x2 << "\t" << x3 << "\t" << f3 << endl;
 
        // Update for next iteration
        x1 = x2;
        f1 = f2;
        x2 = x3;
        f2 = f3;
 
    } while (fabs(f3) > tol); // Stop when residual < tolerance
 
    cout << "--------------------------------------------\n";
    cout << "Approximate root = " << x3 << endl;
 
    return 0;
}
 
				I2luY2x1ZGUgPGlvc3RyZWFtPiAgICAgICAgICAvL2lkPTI0MDI0MjEwMwojaW5jbHVkZSA8Y21hdGg+IAojaW5jbHVkZSA8aW9tYW5pcD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCi8vIEhvcm5lcidzIHJ1bGUgdG8gZXZhbHVhdGUgZih4KQpkb3VibGUgaG9ybmVyKGRvdWJsZSBjb2VmZltdLCBpbnQgbiwgZG91YmxlIHgpIHsKICAgIGRvdWJsZSByZXN1bHQgPSBjb2VmZltuXTsKICAgIGZvciAoaW50IGkgPSBuIC0gMTsgaSA+PSAwOyBpLS0pCiAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICogeCArIGNvZWZmW2ldOwogICAgcmV0dXJuIHJlc3VsdDsKfQoKaW50IG1haW4oKSB7CiAgICBpbnQgZGVncmVlOwogICAgY291dCA8PCAiRW50ZXIgdGhlIGRlZ3JlZSBvZiB0aGUgcG9seW5vbWlhbDogIjsKICAgIGNpbiA+PiBkZWdyZWU7CgogICAgZG91YmxlIGNvZWZmW2RlZ3JlZSArIDFdOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gZGVncmVlOyBpKyspIHsKICAgICAgICBjb3V0IDw8ICJ4XiIgPDwgaSA8PCAiOjoiOwogICAgICAgIGNpbiA+PiBjb2VmZltpXTsKICAgIH0KCiAgICBkb3VibGUgeDEsIHgyLCB0b2w7CiAgICBjb3V0IDw8ICJFbnRlciBmaXJzdCBpbml0aWFsIGd1ZXNzIHgxOiAiOwogICAgY2luID4+IHgxOwogICAgY291dCA8PCAiRW50ZXIgc2Vjb25kIGluaXRpYWwgZ3Vlc3MgeDI6ICI7CiAgICBjaW4gPj4geDI7CiAgICBjb3V0IDw8ICJFbnRlciB0b2xlcmFuY2U6ICI7CiAgICBjaW4gPj4gdG9sOwoKICAgIGRvdWJsZSBmMSA9IGhvcm5lcihjb2VmZiwgZGVncmVlLCB4MSk7CiAgICBkb3VibGUgZjIgPSBob3JuZXIoY29lZmYsIGRlZ3JlZSwgeDIpOwogICAgZG91YmxlIHgzLCBmMzsKICAgIGludCBpdGVyID0gMDsKCiAgICBjb3V0IDw8IGZpeGVkIDw8IHNldHByZWNpc2lvbig2KTsKICAgIGNvdXQgPDwgIkl0ZXJhdGlvbiAgeDEgICAgICAgIHgyICAgICAgICB4MyAgICAgICAgZih4MylcbiI7CiAgICBjb3V0IDw8ICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIjsKCiAgICBkbyB7CiAgICAgICAgeDMgPSAoZjIgKiB4MSAtIGYxICogeDIpIC8gKGYyIC0gZjEpOyAvLyBTZWNhbnQgZm9ybXVsYQogICAgICAgIGYzID0gaG9ybmVyKGNvZWZmLCBkZWdyZWUsIHgzKTsKCiAgICAgICAgaXRlcisrOwogICAgICAgIGNvdXQgPDwgaXRlciA8PCAiXHQiIDw8IHgxIDw8ICJcdCIgPDwgeDIgPDwgIlx0IiA8PCB4MyA8PCAiXHQiIDw8IGYzIDw8IGVuZGw7CgogICAgICAgIC8vIFVwZGF0ZSBmb3IgbmV4dCBpdGVyYXRpb24KICAgICAgICB4MSA9IHgyOwogICAgICAgIGYxID0gZjI7CiAgICAgICAgeDIgPSB4MzsKICAgICAgICBmMiA9IGYzOwoKICAgIH0gd2hpbGUgKGZhYnMoZjMpID4gdG9sKTsgLy8gU3RvcCB3aGVuIHJlc2lkdWFsIDwgdG9sZXJhbmNlCgogICAgY291dCA8PCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiI7CiAgICBjb3V0IDw8ICJBcHByb3hpbWF0ZSByb290ID0gIiA8PCB4MyA8PCBlbmRsOwoKICAgIHJldHVybiAwOwp9Cg==