int main(){

	char carmichael;
	long a, n;

	chieve();

	while( 1 ){

		scanf( "%ld" , &n );
		if( n == 0 ) return 0;

		if( prime[n] ) carmichael = 0;
		else carmichael = 1;
		
		for( a = 2; carmichael & a < n; a++ )
			if( exp_mod( &a, n, &n ) != a )
				carmichael = 0;

		if( carmichael ) printf( "The number %ld is a Carmichael number.\n", n );
		else printf( "%ld is normal.\n", n );

	}


	return 0;

}
long exp_mod( long *a, int n, long *mod ){
	
	long r;
	
	if( n == 1 ) return *a; 
	
	r = exp_mod( a, n / 2, mod );
	if( n & 1 ) return ( ( (  r * r ) % *mod ) * *a ) % *mod;
	
	return ( r * r ) % *mod;
}
示例#3
0
unsigned long long exp_mod(unsigned long long M, unsigned long long e, long long  n)
{
	if(e==1)
		return M%n;
	else 
	{
		unsigned long long a=exp_mod(M, e/2,n);
		unsigned long long temp= (a*a)%n;
		if(e%2==0)
			return temp;
		else
			return (temp*M)%n;
	}
}
示例#4
0
bool witness (unsigned long long a, unsigned long long n)
{
	unsigned long long t,u;
	get_t_u(n,t,u);
	v[0]=exp_mod(a,u,n);
	for(unsigned long long i=1;i<=t;i++)
	{
		v[i]=(v[i-1]*v[i-1])%n;
		if(v[i]==1 && v[i-1]!=1 && v[i-1]!=n-1)
			return 1;
	}
	if(v[t]!=1)
		return 1;
	return 0;
}
int main() {

    /* Enter your code here. Read input from STDIN. Print output to STDOUT */    
    int tt;
    scanf("%d",&tt);
    while (tt--)
    {
        int n,m,ans;
        scanf("%d %d",&n,&m);
        if (n==1)
            ans = m;
        else if (n==2)
            ans = (int) (((long long) m) * (m-1) % MOD);
        else
            ans = (int) (((long long) m) * (m-1) % MOD * exp_mod(m-2, n-2, MOD) % MOD);
        printf("%d\n",ans);
    }
    return 0;
}
示例#6
0
int is_probably_prime(llu n) {
    if (n <= 1) return 0;
    if (n <= 3) return 1;
    llu s = 0, d = n - 1;
    while (d % 2 == 0) {
        d/= 2; s++;
    }
    for (int k = 0; k < 64; k++) {
        llu a = (llrand() % (n - 3)) + 2;
        llu x = exp_mod(a, d, n);
        if (x != 1 && x != n-1) {
            for (int r = 1; r < s; r++) {
                x = mul_mod(x, x, n);
                if (x == 1)
                    return 0;
                if (x == n-1)
                    break;
            }
            if (x != n-1)
                return 0;
        }
    }
    return 1;
}