24h購物| | PChome| 登入
2009-06-13 08:26:02| 人氣1,966| 回應0 | 上一篇 | 下一篇

ACM 374 Q374: Big Mod

推薦 0 收藏 0 轉貼0 訂閱站台

作法:數學

作法:(1)由於%的數字很小 , 利用陣列找循環
     (2)離散數學(感謝teching提供)

第2個程式碼的↓

在此提供暴力的循環,速度很慢...

注意:1.循環不一定從頭開始

/*********************************************************/

#include <stdio.h>
int f(int m,int n, int mod)
{
  long long int mul=m;
  long long int r=1;
  while(n){
      if(n%2==1){r*=mul;r%=mod;}
      mul*=mul;
      mul%=mod;
      n>>=1;
  }
  return r;
}
int main()
{
    int B,P,M;
    while(scanf("%d%d%d",&B,&P,&M)==3)
      printf("%d\n",f(B,P,M));
    return 0;
}

/*********************************************************/

#include<stdio.h>  
#include<stdlib.h>  
main()  
{  
 int B,P,M;  
 while(scanf("%d %d %d",&B,&P,&M)==3)  
   {  
     if(P==0) {printf("1\n");continue;}
     int circle[46341]={0},BP[46341]={0};  
     int circleL[46341]={0};  
     int n=B%M,L=1,now=B%M;  
    while(circle[now]!=1&&L<=P)
     {  
      circle[now]=1;  
      BP[L]=now;   
      circleL[now]=L;  
      L++;  
      now=now*n%M;  
     }
     if(P>=L)
      {
       L=L-circleL[now];
       P=P-circleL[now];
       P=P%L;
       P=P+circleL[now];
      }
     printf("%d\n",BP[P]);   
   }   
 return 0;  
}

台長: 來源不明
人氣(1,966) | 回應(0)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 數位資訊(科技、網路、通訊、家電) | 個人分類: ACM |
此分類下一篇:ACM 356 Square Pegs And Round Holes
此分類上一篇:ACM 11185 11185 - Ternary

是 (若未登入"個人新聞台帳號"則看不到回覆唷!)
* 請輸入識別碼:
請輸入圖片中算式的結果(可能為0) 
(有*為必填)
TOP
詳全文