예제 #1
0
int main(){

	int v[N] = {0,8,7,6,5,4,3,2,1,-12};

	std::cout << mont(v, N);

	return 0;
}
예제 #2
0
파일: ABPO1.c 프로젝트: KaneRoot/public
Abp spo(Abp a, Nat x)
{
	if(x >= n(a)) return a;
	a = ech(a,x,n(a)-1);
	a = s(a);
	if(v(a,x) < v(a,imont(x)))
		a = mont(a,x);
	else if(v(a,x) > v(a,imin(a,x)))
		a = desc(a,x);
	return a;
}
예제 #3
0
bool mont(int v[], int a, int b){
	bool r;
	if (a == b)
		r = true;

	else if (v[a] >= v[a+1] && v[b-1] <= v[b])
		r = false;

	else {
		if (v[a] < v[a+1])
			a++;
		if (v[b-1] > v[b])
			b--;

		r = mont(v, a, b);
	}
	return r;
}
예제 #4
0
파일: montgomery.cpp 프로젝트: herumi/misc
void test(const mpz_class& p)
{
	std::cout << "p=0x" << std::hex << p << std::endl;
	Montgomery mont(p);

	mpz_class x1("123456789012345678");
	mpz_class y1("987654321092342342");
	for (int i = 0; i < 100; i++) {
		mpz_class z1 = (x1 * y1) % p;
		mpz_class x2, y2, z2;
		mont.toMont(x2, x1);
		mont.toMont(y2, y1);
		mont.mul(z2, x2, y2);
		mont.fromMont(z2, z2);
		if (z1 != z2) {
			puts("ERR");
			std::cout << z1 << std::endl;
			std::cout << z2 << std::endl;
			return;
		}
		x1 = z1;
	}
}
예제 #5
0
bool mont(int v[], int n){
	return mont(v, 0, N-1);
}