• uva 11582


     1                                       #include <iostream> 
     2                                       #include <map> 
     3                                       #include <cmath>
     4                                       #include <vector>
     5                                       #include <cstdio>
     6                                       #include <string>
     7                                       #include <cstring> 
     8                                       #include <algorithm>    
     9                                       using namespace std; 
    10                                       #define fir first
    11                                       #define sec second
    12                                       #define pb(x) push_back(x) 
    13                                       #define mem(A, X) memset(A, X, sizeof A)
    14                                       #define REP(i,l,u) for(int (i)=(int)(l);(i)<=(int)(u);++(i))
    15                                       #define rep(i,l,u) for(int (i)=(int)(l);(i)>=(int)(u);--(i)) 
    16                                       #define foreach(e,x) for(__typeof(x.begin()) e=x.begin();e!=x.end();++e) 
    17                                           
    18                                       typedef pair<long,long>  pll;     
    19                                       
    20                                       
    21                                       int T,n;
    22                                       const int mod=1e9+7; 
    23                                       const int maxn=1e3+10; 
    24    typedef unsigned  long long ULL;  
    25    ULL qsm(ULL a, ULL b, ULL mod)  // 0<=a<=ULL  0<=b<=ULL   
    26   {   
    27       a=a%mod;
    28       ULL res=1;  
    29       while(b)  
    30       {  
    31           //a=a%mod;(有时候n的值太大了会超出long long的储存,所以要先取余)  
    32           if(b&1)//&位运算:判断二进制最后一位是0还是1,&的运算规则为前后都是1的时候才是1;  
    33               res=res*a%mod;  
    34           b=b>>1;//相当于除以2;  
    35           a=a*a%mod;  
    36       }  
    37       return res;  
    38   }        
    39 ULL f[maxn*maxn+1000];
    40                                       int main()
    41                                       {
    42                                            freopen("in.txt","r",stdin); 
    43                                            //while(cin>>n)
    44                                            while(cin>>T&&T)
    45                                            { 
    46                                              REP(kase,1,T)  {
    47                                                  ULL ans;
    48                                                  ULL a,b,n;
    49                                                  cin>>a>>b>>n;
    50                                                  if(a==0||n==1) ans=0;
    51                                                  else
    52                                                  {
    53 
    54                                                  f[1]=1;
    55                                                  f[0]=0;
    56 
    57                                                  int M;
    58                                                  REP(i,2,n*n+10)
    59                                                  {
    60                                                      f[i]=(f[i-1]+f[i-2])%n;
    61                                                      if(f[i]==f[1]&&f[i-1]==f[0])
    62                                                      {
    63                                                          M=i-1;
    64                                                          break;
    65                                                      }
    66                                                  } 
    67                                                  ULL t=qsm(a,b,M);
    68                                                  ans=f[t];
    69                                              }
    70                                                  cout<<ans<<endl;
    71                                               }  
    72                                            }
    73                                         return 0;
    74                                       }
    75                           
    76                                      /*
    77                                         note    :  
    78                                                     对于循环节类的问题,只需要找到刚开始的起始项,之后找到周期,利用周期的一致性,将查询到
    79                                                     项直接进行周期M取模即可,注意f[0]是否进行了赋值,如果没有的话还需要f[0]=f[M].
    80                                         debug   :   范围比较大需要用到ull
    81                                                     re的原因有可能是因为数据类型不一致,(返回 runtime error )
    82                                                      for(int i=1;i<=(unsigned long long)100;i++)
    83                                                     
    84                                         optimize:   分析出n的范围,预处理出来,可以避免大量的查询.分析出来了所有的基本可能情况.
    85                                                     改进快速幂取模, 
    86                                                     命名 进行程序变量的命名的时候,最好直接指代原来的变量例如 预处理n的时候,直接就是n就可以.
    87                                                       REP(n,2,maxn)
    88                                       */                                 
  • 相关阅读:
    Cannot find the class file for java.lang.Object错误
    JAVA 基础 八种数据类型
    获取转发前的uri与jsp:include的uri
    web 应用获取mybatis sqlSessionFactory 扫描保存的的sqlMapper
    Spring MVC 3 试用笔记——helloworld
    Struts2 Plugin 试用笔记
    JavaScript面试题(评解为原创)
    DataSet的Table筛选多条件情况用法
    每日一帖,记录技术点滴
    行内元素和块级元素的区别
  • 原文地址:https://www.cnblogs.com/paulzjt/p/6048175.html
Copyright © 2020-2023  润新知