快速幂 HDU 3003

题意:有种叫PUPU的生物,刚出生是皮肤都是不透明的,如果经过一天阳光的照射,不透明皮肤会不变成透明的,透明皮肤会变成不透明的,阳光只能照射到最外层的不透明皮肤,求全部皮肤变过透明的天数(要求输出的的答案要模N,QAQ,因为这个卡了好久)

#include<stdio.h>
#include<cstring>
#include<iostream>
using namespace std;
long long int quick(long long int a,long long int b,long long int k)
{
     long long int ret=1;

  while (b)

  {
  if(b&1)//b&1判断不是不是奇数,,&位运算符“与”,在2进制里奇数最后一位一定是1,所以与1“与”,是1,而偶数与1“与”是0
  {
  ret=ret*a%k;
  }
  a=a*a%k;
  b>>=1;//b>>=1就是b=b/2;
  }
return ret;
}
int main ()
{
   long long int n;
  cin>>n;
  while (n!=0)
  {


  cout<<quick(2,n-1,n)+1<<endl;
  cin>>n;
  }

return 0;
}

 

posted @ 2016-08-01 12:01  BaiMaSangBu  阅读(175)  评论(0)    收藏  举报