【cf493E】Vasya and Polynomial

2014年12月4日2,5126

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 adegree 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 , and , where 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 no greater than 1018.

Output

If there is an infinite number of such polynomials, then print “infwithout quotes, otherwise print the reminder of an answer modulo 109 + 7.

Sample test(s)
input

output

input

output

 

题解

真是神题啊。。。

做了好多英文阅读。。。如有错误请指正。。。

以下默认多项式系数非负

t=a=b=1,有无数解

t=a=b=n(n>1),此时有两解 p(x)=a p(x)=x

以下证明其余情况最多一解

—————————————————————————————-

p(t)=a可以得出多项式的系数和<a,t=1时系数和<=a下面会另外讨论

我们考虑把b在a进制下表示,就能得到一个多项式使得p(a)=b

—–如 1497 = 2 × 93 + 4 ×9 + 3 -> p(x) = 2 x3 + 4 x + 3

由于多项式的系数和<=a,所以我们无法通过调整系数使得存在另一个多项式p'(x)满足p'(a)=b

因为将多项式的任意一个x^k分解

—–如2 x3 + 4 x + 3 -> x3 + 13 x + 3

至少会使得p(x)系数和增加a-1,而p(x)系数和>=1,调整后>=a

(p(x)系数和等于0的情况即a=b,若t<>a=b则显然只有一解p(x)=a)

*但若t=1,且p(x)系数和为1,调整后p'(x)系数和为a,形如p(1)=k,p(k)=k^q,则唯一解为p(x)=k*x^(q-1)

—————————————————————————————-

特判后将b在a进制下表示得到系数后带入t检验即可

 

  • 王文海2014年12月4日 下午8:45 回复

    楼主,你程序有个bug
    1 1 10
    这组数据会在 log(b)/log(a) 里面 变成 log(10)/0

    #1  
    • hzwer2014年12月4日 下午8:57 回复
      admin

      恩。。。但是好像不影响结果?

      #11
      • 王文海2014年12月4日 下午9:08 回复

        是的,h变成了一个很小的负数,然后没影响结果

        #12
      • 王文海2014年12月4日 下午9:13 回复

        不过,有点不好

        #12
      • coolwyj2014年12月4日 下午9:15 回复

        谢谢你的思路,很有帮助。但是你的程序里h是不需要long long的,换成int就会T了……只能说LL 下溢出的好巧……需要特判一下a = 1的情况。

        #12
        • hzwer2014年12月4日 下午10:24 回复
          admin

          我加了,但实际上/0在double下是有定义的,是一个inf,用longlong存会溢出为负数

          #13