O(nlogn)、n = 2 ^ k;で(x ^ n除算p)のリマインダーを見つけたいです。私はこれを書いていますが、真実ではありません。助けてもらえますか?
rem(int x,int n,int p){
if (n==1)
return x%p;
else
return rem(x,n/2,p);
}
O(nlogn)、n = 2 ^ k;で(x ^ n除算p)のリマインダーを見つけたいです。私はこれを書いていますが、真実ではありません。助けてもらえますか?
rem(int x,int n,int p){
if (n==1)
return x%p;
else
return rem(x,n/2,p);
}
これが宿題であると仮定すると、ここにヒントがあります。二乗による指数化について読むと、擬似コードを含め、ソリューションを構築するために必要なすべてのものが得られます。
現在の実装では、の偶数値と奇数値を区別していません。これは、が2の累乗であるn
場合にのみ正しい値です。n
ソリューションを拡張して、すべての人に役立つようにすることができますn
(以下を参照)。
rem(x,n/2,p)
とが偶数の戻り値を取得したらn
、結果を2乗し、残りの2乗を取る必要があります。
これを拡張してn
、の累乗だけでなく、すべてのに機能するように2
、結果にさらに乗算し、x
の奇数値の余りをとることができますn
。