0
xの正の値と負の値の両方について、上記の問題の作業コードを考え出しました。大部分の状況に対する答えは正しいですが、コーナーケースでコードが失敗し、問題の内容を見つけることができません。どのような条件私が行方不明です: `pow(x、n)%dを計算中のコーナーケース
int pow(int x, int n, int d) {
int i=0,rem=1;
long long l;
if(x==0)
{
return 0;
}
if(x==1)
{
return 1;
}
if(n==0)
{
return 1;
}
x=x%d;
if(n%2==0||n==0)
{
l = ((pow(x,n/2,d))*(pow((x),n/2,d)))%d;
}
else
{
l = ((x)*(pow(x,(n-1)/2,d))*(pow((x),(n-1)/2,d)))%d;
}
if(x<0 && n%2!=0)
{
return d+l;
}
else
{
return l;
}
}
` コードが間違ったANSを与えるのケースを:
A: 71045970
B : 41535484
C : 64735492
My Output: 12942068
Actual Output:20805472
このコードは、どこかで 'l'を宣言しない限り、コンパイルすべきではありません。次に、 '&n == 0'の背後にあるアイデアは何ですか?最後に、コーナーケースは何ですか? – sweber
は私にint overflowの問題を抱えています...私はこのようなmodpowを行っています:[モジュラー演算とNTT(有限体DFT)最適化](https://stackoverflow.com/q/18577076/2521214)。また、あなたの 'if 'ステートメントに'() 'の括弧を入れておくと、より安全に感じるでしょう – Spektre
私は明らかに理由のために変数名としてlを使用することを個人的に避けています –