hdu 3003 Pupu

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3003

题目大意:一种动物身上有n种不同的皮肤,每种皮肤有透明很不透明两种状态,经过一天的日晒,透明的可以变成不透明,不透明的可以变成透明.

刚出生的动物的皮肤是不透明的,还有只有在皮肤外层是透明的时候才可以照射进去。计算出多少天后动物的皮肤全都变过透明的。

也就是等同于最后一个变过透明是即可。

推导公式:

0表示不透明的,1表示透明的。

前一个从0变1的时候后一个可以从1变到0,也就是说前一个变2次,后一个可以变一次,前一个变四次,后后一个可以变一次。。。。。以此类推。

 1 #include <iostream>

 2 #include <cstdio>

 3 using namespace std;

 4 

 5 __int64 fun(__int64 a,__int64 b,__int64 c)

 6 {

 7     int s=1;

 8     while (b)

 9     {

10         if (b%2==1)

11             s=s*a%c;

12         a=a*a%c;

13         b/=2;

14     }

15     return s;

16 }

17 

18 int main ()

19 {

20     __int64 n,q;

21     while (scanf("%I64d",&n),n)

22     {

23         q=fun(2,n-1,n)+1;

24         printf ("%I64d\n",q);

25     }

26     return 0;

27 }

 

 

你可能感兴趣的:(HDU)