南郵OJ 2075特技のべき乗


特技のべき乗
時間制限(通常/Java) : 
1000 MS/ 3000 MS          実行メモリ制限:65536 KByte
合計コミット:523           試験合格:125 
試合の説明
べき乗演算は一般的な数学演算の一つであり、同じ数で何度も乗算する原理があるが、べき乗指数が特に大きい場合、このような演算は時間を浪費することがある.べき乗に特技を加えて、べき乗演算の効率を許容できる程度に高めてください.
入力
最初の行は整数Tで、Tグループのデータがあることを示します.
各グループのデータ、x,yを入力 xのy次べき乗を求めます(2≦ x ,y≤10^9)
しゅつりょく
各グループのデータは1つの整数を出力して、べき乗演算が1000000007に対して型を取った後の結果を表します
サンプル入力
2 2 4 2 100000000
サンプル出力
16 494499948
テーマソース
kojimai
#include<iostream>
#define MOD 1000000007
int main(){
	__int64 T,x,y,result,i;
	scanf("%I64d",&T);
	while(T--){
		scanf("%I64d%I64d",&x,&y);
		for(i=1,result=1; i<=y; ){
			if(i&y){
				result *= x;
				result %= MOD;
			}
			x = x*x%MOD;
			i <<= 1;
		}
		printf("%I64d
",result); } }