TEST(Integer, CppPow) { for(int i=0; i<50; i++) { Integer p = Integer::GetRandomInteger(1024, true); Integer a = Integer::GetRandomInteger(0, p); Integer e1 = Integer::GetRandomInteger(0, p-1); Integer e2 = Integer::GetRandomInteger(0, p-1); EXPECT_EQ(a.Pow(e1, p).Pow(e2, p), a.Pow(e2, p).Pow(e1, p)); Integer v = a.Pow(e1, p); EXPECT_EQ(v.MultiplyMod(v, p), a.Pow(e1 + e1, p)); } }
//----------------------------------------------------------------------------------- Integer Converter::ToInteger(std::string &polynom) { Integer result; if(polynom.length() != 0) { int last_nonzero = polynom.find_last_of("1"); result.Pow(2,last_nonzero); } return result; }
TEST(Integer, OpenPow) { Integer base(10); Integer exp(100); EXPECT_EQ(exp, base.Pow(Integer(10), Integer(101))); EXPECT_EQ(Integer(0), base.Pow(Integer(10), Integer(100))); for(int i=0; i<10; i++) { Integer p = Integer::GetRandomInteger(1024, true); Integer a = Integer::GetRandomInteger(0, p); Integer b = Integer::GetRandomInteger(0, p); Integer e1 = Integer::GetRandomInteger(0, p); Integer e2 = Integer::GetRandomInteger(0, p); EXPECT_EQ(p.PowCascade(a, e1, b, e2), (a.Pow(e1, p) * b.Pow(e2, p))%p); EXPECT_EQ(Integer(1), a.Pow(0, p)); EXPECT_EQ(a, a.Pow(1, p)); } }