Exemplo n.º 1
0
void
bignum_power_number(int expo)
{
	unsigned int *a, *b, *t;

	save();

	p1 = pop();

	a = mpow(p1->u.q.a, abs(expo));
	b = mpow(p1->u.q.b, abs(expo));

	if (expo < 0) {
		t = a;
		a = b;
		b = t;
		MSIGN(a) = MSIGN(b);
		MSIGN(b) = 1;
	}

	p1 = alloc();

	p1->k = NUM;

	p1->u.q.a = a;
	p1->u.q.b = b;

	push(p1);

	restore();
}
void testSingular(const MatrixType& m_const, double tol)
{
  // we need to pass by reference in order to prevent errors with
  // MSVC for aligned data types ...
  MatrixType& m = const_cast<MatrixType&>(m_const);

  const int IsComplex = NumTraits<typename internal::traits<MatrixType>::Scalar>::IsComplex;
  typedef typename internal::conditional<IsComplex, TriangularView<MatrixType,Upper>, const MatrixType&>::type TriangularType;
  typename internal::conditional< IsComplex, ComplexSchur<MatrixType>, RealSchur<MatrixType> >::type schur;
  MatrixType T;

  for (int i=0; i < g_repeat; ++i) {
    m.setRandom();
    m.col(0).fill(0);

    schur.compute(m);
    T = schur.matrixT();
    const MatrixType& U = schur.matrixU();
    processTriangularMatrix<MatrixType>::run(m, T, U);
    MatrixPower<MatrixType> mpow(m);

    T = T.sqrt();
    VERIFY(mpow(0.5).isApprox(U * (TriangularType(T) * U.adjoint()), tol));

    T = T.sqrt();
    VERIFY(mpow(0.25).isApprox(U * (TriangularType(T) * U.adjoint()), tol));

    T = T.sqrt();
    VERIFY(mpow(0.125).isApprox(U * (TriangularType(T) * U.adjoint()), tol));
  }
}
Exemplo n.º 3
0
void testExponentLaws(const MatrixType& m, double tol)
{
  typedef typename MatrixType::RealScalar RealScalar;
  MatrixType m1, m2, m3, m4, m5;
  RealScalar x, y;

  for (int i=0; i < g_repeat; ++i) {
    generateTestMatrix<MatrixType>::run(m1, m.rows());
    MatrixPower<MatrixType> mpow(m1);

    x = internal::random<RealScalar>();
    y = internal::random<RealScalar>();
    m2 = mpow(x);
    m3 = mpow(y);

    m4 = mpow(x+y);
    m5.noalias() = m2 * m3;
    VERIFY(m4.isApprox(m5, static_cast<RealScalar>(tol)));

    m4 = mpow(x*y);
    m5 = m2.pow(y);
    VERIFY(m4.isApprox(m5, static_cast<RealScalar>(tol)));

    m4 = (std::abs(x) * m1).pow(y);
    m5 = std::pow(std::abs(x), y) * m3;
    VERIFY(m4.isApprox(m5, static_cast<RealScalar>(tol)));
  }
}
Exemplo n.º 4
0
void
test_mroot(void)
{
	int i, j, mem;
	unsigned int *a, *b, *c;

	logout("testing mroot\n");

	mem = mtotal;

	// small numbers

	for (i = 0; i < 10; i++) {
		a = mint(i);
		for (j = 1; j < 10; j++) {
			b = mpow(a, j);
			c = mroot(b, j);
			if (c == 0 || mcmp(a, c) != 0) {
				sprintf(logbuf, "failed a=%d b=%d c=%d\n", a[0], b[0], c[0]);
				logout(logbuf);
				errout();
			}
			mfree(b);
			mfree(c);
		}
		mfree(a);
	}

	a = mint(12345);

	for (i = 1; i < 10; i++) {
		b = mpow(a, i);
		c = mroot(b, i);
		if (c == 0 || mcmp(a, c) != 0) {
			logout("failed\n");
			errout();
		}
		mfree(b);
		mfree(c);
	}

	mfree(a);

	if (mtotal != mem) {
		logout("memory leak\n");
		errout();
	}

	logout("ok\n");
}
Exemplo n.º 5
0
int main()
{
    int i, j, n, c, fb[8], T;
    Matrix m;
    char s[16384];
    
    for (scanf("%d", &T); T-- > 0 && scanf("%d %d %s", &n, &c, s) == 3;) {
        for (i = 0; s[i]; i++)
            s[i] = toupper(s[i]);
        
        memset(fb, 0, sizeof(fb));
        for (i = 'A'; i <= 'A'+c; i++) {
            char *p = strchr(s, i);
            if (p != NULL)
                for (p++; *p; p++) fb[i-'A'] |= 1 << (*p-'A');
        }
        
        memset(&m, 0, sizeof(m));
        m.d = 1 << c;
        for (int s = 0; s < m.d; s++)
            for (int a = 0; a < c; a++)
                if (s & (1 << a)) m.a[s][s & ~fb[a]]++;
        
        mpow(m, n);
        
        for (i = j = 0; i < m.d; i++)
            j = (j + m.a[m.d-1][i]) % 4242;
        
        printf("%d\n", j);
    }
    
    return 0;
}
Exemplo n.º 6
0
long long solve(long long n, long long b, long long d, long long m) {
	// d * (b^n - 1) / (b - 1) mod m
	long long ret;
	ret = mpow(b, n, (b - 1) * m); // b^n mod (b-1) * m
	ret = (ret + (b - 1) * m - 1)/ (b - 1);
	ret = mul(ret, d, m);
	return ret;
}
Exemplo n.º 7
0
int dfs(int idx, long long k2) {
	if (idx == 12) {
		if (mpow(K1, k2, t10[idx]) == k2%t10[idx]) {
			K2 = k2;
			return 1;
		}
		return 0;
	}
	for (int i = (idx == 11); i <= 9; i++) {
		long long x = t10[idx] * i + k2;
		if (mpow(K1, x, t10[idx]) == x%t10[idx]) {
			if (dfs(idx+1, x))
				return 1; 
		}
	}
	return 0;
}
Exemplo n.º 8
0
unsigned int *
mroot(unsigned int *n, unsigned int index)
{
	int i, j, k;
	unsigned int m, *x, *y;

	if (index == 0)
		stop("root index is zero");

	// count number of bits

	k = 32 * (MLENGTH(n) - 1);

	m = n[MLENGTH(n) - 1];

	while (m) {
		m >>= 1;
		k++;
	}

	if (k == 0)
		return mint(0);

	// initial guess

	k = (k - 1) / index;

	j = k / 32 + 1;
	x = mnew(j);
	MSIGN(x) = 1;
	MLENGTH(x) = j;
	for (i = 0; i < j; i++)
		x[i] = 0;

	while (k >= 0) {
		mp_set_bit(x, k);
		y = mpow(x, index);
		switch (mcmp(y, n)) {
		case -1:
			break;
		case 0:
			mfree(y);
			return x;
		case 1:
			mp_clr_bit(x, k);
			break;
		}
		mfree(y);
		k--;
	}

	mfree(x);

	return 0;
}
Exemplo n.º 9
0
void testTriangularProduct(const MatrixType& m, const VectorType& v, double tol)
{
  typedef typename MatrixType::RealScalar RealScalar;
  MatrixType m1;
  VectorType v1, v2, v3;
  RealScalar p;

  for (int i=0; i < g_repeat; ++i) {
    generateTriangularMatrix<MatrixType>::run(m1, m.rows());
    MatrixPowerTriangular<MatrixType> mpow(m1);

    v1 = VectorType::Random(v.rows(), v.cols());
    p = internal::random<RealScalar>();

    v2.noalias() = mpow(p) * v1;
    v3.noalias() = mpow(p).eval() * v1;
    std::cout << "testTriangularProduct: error powerm = " << relerr(v2, v3) << '\n';
    VERIFY(v2.isApprox(v3, static_cast<RealScalar>(tol)));
  }
}
Exemplo n.º 10
0
void cidr(unsigned long first, unsigned long last) {
  if (first < last) {
    unsigned int idx1=31,idx2=0,prefix;
    while (bit(first,idx1) == bit(last,idx1)) idx1--;
    prefix=(first>>idx1+1)<<idx1+1;
    while (idx2 <= idx1 && bit(first,idx2) == 0 && bit(last,idx2) == 1) idx2++;
    if (idx2 <= idx1) {
      cidr(first,prefix|(unsigned long)mpow(2,idx1)-1);
      cidr(prefix|1<<idx1,last);
    }
    else printf("%s/%d\n",inet_ntoa(htonl(prefix)),32-idx2);
  }
Exemplo n.º 11
0
int main() {
	scanf("%*d");
	char buf[32];
	int n;
	while (scanf("%d", &n) == 1) {
		sprintf(buf, "%d", n);
		int m = strlen(buf), sum = 0;
		for (int i = 0; i < m; i++)
			sum += mpow(buf[i] - '0', m);
		puts("Not Armstrong" + (sum == n ? 4 : 0));
	}
	return 0;
}
Exemplo n.º 12
0
int main() {
//	freopen("in.txt", "r+t", stdin);
//	freopen("out.txt", "w+t", stdout); 
	int testcase, cases = 0;
	long long D, V;
	scanf("%d", &testcase);
	while (scanf("%lld %lld", &D, &V) == 2) {
		assert(D >= 0 && V > 0 && D <= 2e+9 && V <= 2e+9);
		long long ret = 0;
		if (D == 0)			ret = 1;
		else if (D == 1)	ret = (V + 1)%mod;
		else if (V == 1)	ret = -1;
		else if (V == 2)	ret = (1 + D * 2)%mod;
		else {
			ret = mpow(V - 1, D, mod) - 1 + mod;
			ret = ret * mpow(V - 2, mod - 2, mod) %mod;
			ret = ret * V %mod;
			ret = (ret + 1 + mod)%mod;
			assert(ret >= 0);
		}
		printf("Case %d: %lld\n", ++cases, ret);
	}
	return 0;
}
Exemplo n.º 13
0
int deal_input(char *str, char *strre)
{
	int length;
	char stmp[INPUTLENGTH];
	
	int dotpos;
	int i;
	unsigned int left,right;
	int number;
	
	
	length = strlen(str);
	
	for(i=0; i<length; i++) {
		if(str[i] == '.') {
			dotpos = i;
			break;
		}
	}
	memset(stmp, 0, sizeof(stmp));
	memcpy(stmp, str, dotpos);
	
	left = atoi(stmp);

	for(i=length-1; i>dotpos; i--) {
		if( str[i] == '0' ) {
			length--;
			continue;
		} else
			break;
	}
	if(length == dotpos+1) {
		right=0;
		number = left;
		dotpos = 0;
	} else {
		memset(stmp, 0, sizeof(stmp));
		memcpy(stmp, str+dotpos+1, length-dotpos-1);
		right = atoi(stmp);
		number = right+ (left*mpow(length-dotpos-1));
		dotpos = length-dotpos-1;
	}
	sprintf(strre, "%d", number);
	
	return dotpos;
}
Exemplo n.º 14
0
int poly::eval(const vector<int>& x, int m)
{
  int ret = 100*m;
  for(deque<term>::iterator i=terms.begin(); i!=terms.end(); i++)
  {
    int tmp = 1;
    monomial mon = i->second;
    for(int j=0; j<n_vars; j++)
    {
      tmp *= mpow(x[j],mon[j],m);
      tmp %= m;
    }
    tmp *= i->first;
    tmp = (tmp+100*m) % m;
    ret += tmp;
  }
  return (ret+100*m)%m;
}
Exemplo n.º 15
0
int main(){
	int a, b;
	printf("Enter two integers: ");
	scanf("%d %d",&a, &b);
	#ifdef opquo
		printf("Quotient: %d\n",quo(a,b));
	#endif
	#ifdef oprem
		printf("Remainder: %d\n",rem(a,b));
	#endif
	#ifdef opsum
		printf("Sum: %d\n",sum(a,b));
	#endif
	#ifdef opprod
		printf("Product: %d\n",prod(a,b));
	#endif
	#ifdef opmpow
		printf("Exponent: %ld\n",mpow(a,b));
	#endif
	return 0;
}
Exemplo n.º 16
0
int main() {
    int testcase;
    int n, p[128];
    scanf("%d", &testcase);
    while (testcase--) {
        scanf("%d", &n);
        for (int i = 0; i < n; i++)
            scanf("%d", &p[i]);

        int ret = 0;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                if (i == j)
                    continue;
                if (mpow(p[i], (p[j]-1)/2, p[j]) == 1)
                    ret++;
            }
        }
        printf("%d\n", ret);
    }
    return 0;
}
Exemplo n.º 17
0
void
test_mpow(void)
{
	int i, j, mem, x;
	unsigned int *a, *b, *c;

	logout("testing mpow\n");

	mem = mtotal;

	// small numbers

	for (i = -10; i < 10; i++) {
		a = mint(i);
		x = 1;
		for (j = 0; j < 10; j++) {
			b = mpow(a, j);
			c = mint(x);
			if (mcmp(b, c) != 0) {
				sprintf(logbuf, "failed a=%d b=%d c=%d\n", a[0], b[0], c[0]);
				logout(logbuf);
				errout();
			}
			mfree(b);
			mfree(c);
			x *= i;
		}
		mfree(a);
	}

	if (mem != mtotal) {
		logout("memory leak\n");
		errout();
	}

	logout("ok\n");
}
Exemplo n.º 18
0
double Length(int a, int b, struct Vertex **vert)
{
    return sqrt(mpow(vert[a]->x - vert[b]->x) + mpow(vert[a]->y - vert[b]->y));
}
Exemplo n.º 19
0
unsigned int mpow(unsigned int x, unsigned int n) {
  return (!n)?1:(n&1)?x*mpow(x,n-1):mpow(x*x,n/2);
}
Exemplo n.º 20
0
int main() {
	printf("%lld\n", mpow(2, 10, 1000));
	return 0;
}