C/C++の宿題を片付けます 59代目
■ このスレッドは過去ログ倉庫に格納されています
0260デフォルトの名無しさん
2006/01/29(日) 00:33:463 に 2をどう使ったらいいかわからんかったので,拡張GCDを新たに書いて使った.
わざわざプログラム三つ書くの面倒だったから適当に直してください.
void f(int P, int X) { /* 問1 */
int Y;
for (Y = 1; (X * Y) % P != 1; ++Y);
printf("Y = %d\n", Y);
}
int gcd(int X, int Y) { /* 問2 */
return Y > 0 ? gcd(Y, X % Y) : X;
}
/* 問3 で使う拡張GCD:
* aX + bY = gcd(X,Y) なる gcd(X,Y), a, b を求める */
int extgcd(int X, int Y, int *a, int *b) {
int g = X; *a = 1, *b = 0;
if (Y > 0) g = extgcd(Y, X % Y, b, a), *b -= (X / Y) * (*a);
return g;
}
void g(int P, int X) { /* 問3 */
int Y, dummy;
extgcd(X, P, &Y, &dummy);
while (Y < 0) Y += P;
printf("Y = %d\n", Y % P);
}
■ このスレッドは過去ログ倉庫に格納されています