天天看點

Codeforces Round #281 (Div. 2)E(數學)

E. Vasya and Polynomial time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output

Vasya is studying in the last class of school and soon he will take exams. He decided to study polynomials. Polynomial is a function P(x) = a0 + a1x1 + ... + anxn. Numbers ai are called coefficients of a polynomial, non-negative integer n is called a degree of a polynomial.

Vasya has made a bet with his friends that he can solve any problem with polynomials. They suggested him the problem: "Determine how many polynomials P(x) exist with integer non-negative coefficients so that 

Codeforces Round #281 (Div. 2)E(數學)

, and 

Codeforces Round #281 (Div. 2)E(數學)

, where 

Codeforces Round #281 (Div. 2)E(數學)

 and b are given positive integers"?

Vasya does not like losing bets, but he has no idea how to solve this task, so please help him to solve the problem.

Input

The input contains three integer positive numbers 

Codeforces Round #281 (Div. 2)E(數學)

 no greater than 1018.

Output

If there is an infinite number of such polynomials, then print "inf" without quotes, otherwise print the reminder of an answer modulo109 + 7.

Sample test(s) input

2 2 2
      

output

2
      

input

2 3 3
      

output

1      

題意:RT

思路:給出了t,a,b,那麼有

            f(t)=a0+a1*t+a2*t^2+...+an*t^n=a

           f(a)=a0+a1*a+a2*a^2+...+an*a^n=b

           a1+a2*t+...+an*t^(n-1)=(a-a0)/t

           a1+a2*a+...+an*a^(n-1)=(b-a0)/a

           那麼(a-a0)%t=0 && (b-a0)%a=0

           a%t=a0%t && b%a=a0%a

           因為b>a

           是以b=k*a+a0;

          又因為a0<=a && a0<=b

          是以a0=b%a 或者 a0=b%a+a

          這樣遞歸求解各個常數就可以了

#include 
   
    
#include 
    
     
#include 
     
      
#include 
      
       
#include 
       
         #include 
        
          #include 
         
           using namespace std; typedef long long ll; int cnt=0; ll A,t; void dfs(ll a,ll b,int ans) { if(b
          >t>>a>>b; A=a; if(t==1 && a==1){ if(b==1)printf("inf\n"); else printf("0\n"); return 0; } if(a==b){ if(t==a)printf("2\n"); else printf("1\n"); return 0; } dfs(a,b,1); printf("%d\n",cnt); return 0; }