You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
56 lines
1.3 KiB
56 lines
1.3 KiB
#include "test_nt.h"
|
|
|
|
int test_nt_jacobi (int iterations)
|
|
{
|
|
int error = 0;
|
|
int i;
|
|
// Check special cases.
|
|
for (i = iterations; i > 0; i--) {
|
|
cl_I b = 1+2*abs(testrandom_I());
|
|
cl_I c = testrandom_I();
|
|
if (b==1) {
|
|
ASSERT2(jacobi(b*c,b) == 1, b,c);
|
|
} else {
|
|
ASSERT2(jacobi(b*c,b) == 0, b,c);
|
|
}
|
|
}
|
|
for (i = iterations; i > 0; i--) {
|
|
cl_I b = 1+2*abs(testrandom_I());
|
|
if (mod(b,4)==1) {
|
|
ASSERT1(jacobi(-1,b) == 1, b);
|
|
} else {
|
|
ASSERT1(jacobi(-1,b) == -1, b);
|
|
}
|
|
if (abs(mod(b,8)-4)==1) {
|
|
ASSERT1(jacobi(2,b) == -1, b);
|
|
} else {
|
|
ASSERT1(jacobi(2,b) == 1, b);
|
|
}
|
|
}
|
|
// Check quadratic residues.
|
|
for (i = iterations; i > 0; i--) {
|
|
cl_I b = 1+2*abs(testrandom_I());
|
|
cl_I c = testrandom_I();
|
|
cl_I a = mod(square(c),b);
|
|
if (gcd(a,b)==1) {
|
|
ASSERT2(jacobi(a,b) == 1, b,c);
|
|
} else {
|
|
ASSERT2(jacobi(a,b) == 0, b,c);
|
|
}
|
|
}
|
|
// Check homomorphism (fixed b).
|
|
for (i = iterations; i > 0; i--) {
|
|
cl_I b = 1+2*abs(testrandom_I());
|
|
cl_I a1 = testrandom_I();
|
|
cl_I a2 = testrandom_I();
|
|
ASSERT3(jacobi(a1,b)*jacobi(a2,b) == jacobi(a1*a2,b), b,a1,a2);
|
|
}
|
|
// Check homomorphism (fixed a).
|
|
for (i = iterations; i > 0; i--) {
|
|
cl_I a = testrandom_I();
|
|
cl_I b1 = 1+2*abs(testrandom_I());
|
|
cl_I b2 = 1+2*abs(testrandom_I());
|
|
ASSERT3(jacobi(a,b1)*jacobi(a,b2) == jacobi(a,b1*b2), a,b1,b2);
|
|
}
|
|
return error;
|
|
}
|