Áp dụng Định lý Viète


Submit solution

Points: 3
Time limit: 1.0s
Memory limit: 98M

Author:
Problem types
Allowed languages
Ada, Assembly, Awk, C, C++, C11, CLANG, CLANGX, Classical, COBOL, Coffee, CSC, D lang, DART, F95, FORTH, Fortrn, GAS32, GO, Haskell, Itercal, Java, kotlin, LEAN, LISP, LUA, MONOVB, Nasm, OCAML, Pascal, Perl, php, PIKE, prolog, Pypy, Python, Ruby 2, RUST, Scala, SCM, SED, SWIFT, TCL, TUR, V8JS, VB, ZIG

Khi tìm hiểu về Định lý Viète, Toto thấy rằng nếu phương trình bậc hai x2+bx+c=0 với b,c là các giá trị nguyên có hai nghiệm thực αβ thì với số tự nhiên n bất kỳ đều có

αn+βn cũng là là số nguyên

Bài toán đặt ra là nhập vào b,c,n tính giá trị của biểu thức αn+βn

Input

Dòng đầu là số bộ kiểm thử t(1t100)

Các dòng tiếp theo gồm t dòng mỗi dòng chứa 3 giá trị b,c có giá trị tuyệt đối nhỏ hơn hay bằng 1000 và số nguyên dương n không vượt quá 1000 biết rằng b,c thỏa mãn điều kiện để phương trình luôn có hai nghiệm thực

Output

Gồm t dòng mỗi dòng là kết quả của một trường hợp kiểm thử vì kết quả có thể rất lớn nên chỉ lấy phần dư của nó cho 1000000007 (1e9+7) là một số tự nhiên

Ví dụ

Input

Copy
3
-4 0 5
-1 -6 3
-1 -1 3

Output

Copy
1024
19
4

Giải thích:

ở test 1 phương trình x24x=0 có hai nghiệm là 40 ta có 45+05=1024

ở test 2 phương trình x2x6=0 có hai nghiệm là 23 ta có (2)3+33=19

ở test 3 phương trình x2x1=0 có hai nghiệm là 1521+52 ta có

(152)3+(152)3=4

tichpx

Comments


  • 0
    TICHPX  commented on Oct. 26, 2021, 3:46 a.m.

    Gợi ý: Anh em học toán rời rạc rồi bài này hướng làm ngược của bài giải biểu thức truy hồi


  • 0
    LãoTam  commented on Oct. 25, 2021, 3:26 p.m.

    [user:^_^]

    Copy
    #include<bits/stdc++.h>
    #include<iostream>
    using namespace std;
    int main(){
        int n,b[100],c[100],s[100],delta[100];
        float x1[100],x2[100];
        cin>>n;
        for(int i=0;i<n;i++){
            cin>>b[i]>>c[i]>>s[i];
        }
        for(int i=0;i<n;i++){
    
            delta[i] = b[i]*b[i] - 4*c[i];
            if(delta[i] > 0) {
                x1[i] = (-b[i]+sqrt(delta[i]))/(2);
                x2[i] = (-b[i]-sqrt(delta[i]))/(2);
    
            } else if ( delta == 0) {
                x1[i]=-b[i]/2;
                            x2[i]=-b[i]/2;
    
            } 
            cout<<pow(x1[i],s[i])+pow(x2[i],s[i])<<endl;
        }
    
        return 0;
    }

    cho em hỏi em sai ở đâu thế ạ


    • 0
      TICHPX  commented on Oct. 26, 2021, 3:43 a.m.

      nó là số nguyên mà lại lấy phần dư của nó cho 10^9+7 cơ mà em