HDu 1420(Prepared for New Acmer)(中国の残りの定理)(べき乗を下げる法)
2406 ワード
Prepared for New Acmer
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 6516 Accepted Submission(s): 2450
Problem Description
合宿は2週間近く行われたが、この間は回復的な訓練を主とし、私はずっとみんなの訓練状況に注目していた.ここでは特に今回のDP特別テーマ練習試合にテーマとテストデータを提供してくれた合宿チームのキャプテンxhdさんに感謝します.
特に嬉しいことに、合宿チームの訓練に尾行した新しい選手たちはよく演技し、進歩も著しい.特に訓練態度は私の予想を大きく上回っている.
新しい選手がまだシステム訓練を受けていないことを考慮して、私はここで特に簡単な問題に参加しました.
3つの正の整数A,BとC(A,B,C<=100000)を与え、A^B mod Cの結果を求める.
みんながすべて试合の中でACの楽しみを体得することができることを望んで、绝対的なカスタマイズ、とても高い待遇、ほほほ...
Input
入力データは、最初に正の整数Nを含み、試験例の個数を表し、次にN行のデータであり、各行は3つの正の整数A,B,Cを含む.
Output
各テストインスタンスについて計算結果を出力し、各インスタンスの出力が1行を占めます.
Sample Input
Sample Output
Author
lcy
Source
ACM夏休み合宿チーム練習試合(二)
テーマ分析:
この問題を解くには、まずこの式を知っておく必要があります.(a*a)%c=((a%c)*(a%c)))%%c......式1.
次に降順法で、例を挙げて詳しく話しましょう.
3^8=3^4*3^4=(3^2*3^2)*(3^2*3^2)=((3*3)*(3*3)*(3*3)*(3*3)*(3*3)*(3*3))、3^8%5が要求されたと仮定し、まず3%5を求め、
式1に基づいて3^2%5,3^4%5,3^8%5を順次求めることができ,これは2を除いてべき乗を下げる過程である.
1回に2を除いた降順が奇数になる可能性があることに注意してください.この場合、まず1つを取り出してから降順します.
例えば3^10=3^5*3^5(べき乗5、奇数)=(3^2*3^2*3)*(3^2*3^2*3)=......
以下から抜粋:
クリックしてリンクを開く
心得:
大いに利益を得て,ものを学んだ.
コードは次のようになります.
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 6516 Accepted Submission(s): 2450
Problem Description
合宿は2週間近く行われたが、この間は回復的な訓練を主とし、私はずっとみんなの訓練状況に注目していた.ここでは特に今回のDP特別テーマ練習試合にテーマとテストデータを提供してくれた合宿チームのキャプテンxhdさんに感謝します.
特に嬉しいことに、合宿チームの訓練に尾行した新しい選手たちはよく演技し、進歩も著しい.特に訓練態度は私の予想を大きく上回っている.
新しい選手がまだシステム訓練を受けていないことを考慮して、私はここで特に簡単な問題に参加しました.
3つの正の整数A,BとC(A,B,C<=100000)を与え、A^B mod Cの結果を求める.
みんながすべて试合の中でACの楽しみを体得することができることを望んで、绝対的なカスタマイズ、とても高い待遇、ほほほ...
Input
入力データは、最初に正の整数Nを含み、試験例の個数を表し、次にN行のデータであり、各行は3つの正の整数A,B,Cを含む.
Output
各テストインスタンスについて計算結果を出力し、各インスタンスの出力が1行を占めます.
Sample Input
3
2 3 4
3 3 5
4 4 6
Sample Output
0
2
4
Author
lcy
Source
ACM夏休み合宿チーム練習試合(二)
テーマ分析:
この問題を解くには、まずこの式を知っておく必要があります.(a*a)%c=((a%c)*(a%c)))%%c......式1.
次に降順法で、例を挙げて詳しく話しましょう.
3^8=3^4*3^4=(3^2*3^2)*(3^2*3^2)=((3*3)*(3*3)*(3*3)*(3*3)*(3*3)*(3*3))、3^8%5が要求されたと仮定し、まず3%5を求め、
式1に基づいて3^2%5,3^4%5,3^8%5を順次求めることができ,これは2を除いてべき乗を下げる過程である.
1回に2を除いた降順が奇数になる可能性があることに注意してください.この場合、まず1つを取り出してから降順します.
例えば3^10=3^5*3^5(べき乗5、奇数)=(3^2*3^2*3)*(3^2*3^2*3)=......
以下から抜粋:
クリックしてリンクを開く
心得:
大いに利益を得て,ものを学んだ.
コードは次のようになります.
#include<stdio.h>
int main()
{
int i,n,a,b,c;
scanf("%d",&n);
while(n--)
{
__int64 temp,sum;
scanf("%d%d%d",&a,&b,&c);
sum=a%c;
temp=1;
while(b>1)// , a%c
{
if(b&1)// ,
{
temp*=sum;//temp
temp%=c;
b--;// ,
}
else
{
sum*=sum;//
sum%=c;
b/=2;// ,
}
}
printf("%I64d
",sum*temp%c);
}
return 0;
}