24h購物| | PChome| 登入
2009-06-28 19:11:29| 人氣497| 回應0 | 上一篇 | 下一篇

Put a banana in your ear!

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

作法:離散的mod
提供者:teching

在此說明 n&1 為 將n轉成2進位,看最後一位是否為0 簡單的說就是n%2

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

#include<stdio.h>
#include<stdlib.h>
long long int f(int m,int n, int mod){
  long long int mul=m;
  long long int r=1;
  while(n){
      if(n&1){r*=mul;r%=mod;}
      mul*=mul;
      mul%=mod;
      n>>=1;
  }
  return r;
}
main()
{
 int n;
 while(scanf("%d",&n)==1)
   {
     if(n<2)
      {printf("0\n");continue;}
     long long int temp=f(2,n-2,1000000007);
     temp=temp*n%1000000007;
     temp=temp*(n-1)%1000000007;
     printf("%lld\n",temp);
   }
 return 0;
}

台長: 來源不明

您可能對以下文章有興趣

人氣(497) | 回應(0)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 數位資訊(科技、網路、通訊、家電) | 個人分類: ZeroJudge 基礎+原創題庫 |
此分類下一篇:尋找質數
此分類上一篇:共同的數

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