int main() { int T, ca = 1; scanf("%d", &T); while(T--) { scanf("%d%d", &k, &ret); int m = (int)sqrt(1.0 * MOD) + 10; std::map<int, int> mp; for(int i = 0; i < m; i++) { int tmp = pow_mod(k, i); if(mp.find(tmp) == mp.end()) { mp[tmp] = i; } } int ans = MOD; for(int i = 0; i < m; i++) { int tmp = pow_mod(pow_mod(k, i), m); int x, y; exgcd(tmp, MOD, x, y); while(x < 0) x += MOD; x = 1LL * x * ret % MOD; y = 1LL * y * ret % MOD; if(mp.find(x) != mp.end()) { tmp = i * m + mp[x]; if(tmp < ans) { ans = tmp; } } } printf("Case %d: %d\n", ca++, ans); } return 0; }
int main() { phi_table(maxn); scanf("%lld %d", &N, &K); if (K == 1 || K == 3) { inv = get_inv(2); } else if (K == 2) { inv = get_inv(6); } else if (K == 4) { inv = get_inv(30); } else if (K == 5) { inv = get_inv(12); } long long ans = 0; for (int i = 1, j = N; i <= j; ++i, j = N / i) { printf("%lld %lld\n", pow_mod(i, K), euler_phi(N / i)); ans = (ans + pow_mod(i, K) * euler_phi(N / i) % mod) % mod; ans = (ans + (sum(j, K) - sum(N / (i + 1), K)) * euler_phi(i) % mod) % mod; } if (ans < 0) { ans += mod; } printf("%lld\n", ans); return 0; }
int BSGS(int a, int b, int p) { int m, v, e = 1, i; m = (int) sqrt(p + 0.5) + 1;//这里不加1会出错的! v = pow_mod(pow_mod(a, m, p), p - 2, p); map<int, int> x; x[1] = 0; for (i = 1; i < m; ++i){ e = e * a % p; if (!x.count(e)) x[e] = i; } for (i = 0; i < m; ++i){ if (x.count(b)) return i * m + x[b]; b = b * v % p; } return -1; // No solution }
bool is_primitive(long long a,long long p){ if(a>=p)return 0; assert(is_prime(p)); vector<pll> d=factorG(p-1); for(auto i:d) if(pow_mod(a,(p-1)/i.x,p)==1)return 0; return 1; }
vector <int> residue(int p,int N,int a) { int g=primitive_root(p); long long m=discrete_log(g,a,p); vector<int> ret; if (a==0) { ret.push_back(0); return ret; } if (m==-1) return ret; long long A=N,B=p-1,C=m,x,y; long long d=extended_gcd(A,B,x,y); if (c%d!=0) return ret; x=x*(C/d)%B; long long delta=B/d; for (int i=0;i<d;i++) { x=((x+delta)%B+B)%B; ret.push_back((int)pow_mod(g,x,p)); } sort(ret.begin(),ret.end()); ret.erase(unqinue(ret.begin(),ret.end()),ret.end()); return ret; }
int main(){ FILE *ff,*fi; LL ttt,res; freopen("data.in","r",stdin); fi = fopen("data.out","r"); ff = fopen("forcedata_0.out","w"); while(scanf("%d%d%d",&n,&m,&k)!=EOF){ memset(g,0,sizeof(g)); //if(n>8000)break; for(i=0;i<m;i++){ scanf("%d%d%",&ti,&tj); //printf("%d %d\n",n,tj); add(ti,tj); } result = 0; for(i=0;i<n;i++) for(j=0;j<n;j++){ if(!g[i][j]){ result++; add(i,j); } } //printf("%I64d\n",result); fscanf(fi,"%I64d",&ttt); result = pow_mod(k,result,MM); printf("%I64d %s\n",result,ttt==result?"ok":"!!!!!!!!!!!!!!!!!!!!!!"); if(ttt!=result)scanf(" "); fprintf(ff,"%I64d\n",result); } scanf(" "); }
int main() { memset(prime, 0, sizeof(prime)); P(); while (scanf("%d", &n) && n) { int flag = judge(n); if (flag) { printf("%d is normal.\n", n); continue; } else { int flag1 = 1; for (int i = 2; i < n; i++) { int k = pow_mod(i, n, n); if (k != i) { flag1 = 0; break; } } if (flag1) printf("The number %d is a Carmichael number.\n", n); else printf("%d is normal.\n", n); } } return 0; }
long long pow_mod(int n, int k, int m) { if(!k) return 1; long long p = pow_mod(n, k/2, m); p = p * p % m; if(k&1) p = p * n % m; return p; }
int solve (int d, int M) { if (d == k - 1) return A[d]%M; int phi = euler_phi(M); int c = solve (d+1, phi) + phi; return pow_mod(A[d], c, M); }
int main() { int m, n, t; scanf("%d %d %d", &m, &n, &t); for (int i = 0; i <= t; ++i) { C[i][0] = 1; for (int j = 1; j < i; ++j) C[i][j] = (C[i - 1][j - 1] + C[i - 1][j]) % mod; C[i][i] = 1; } int ans = 0; for (int i = 0; i <= t; ++i) ans = (ans + pow_mod(m - 2 * i, n) * C[t][i]) % mod; printf("%d\n", (ans * pow_mod(inv2, t) % mod + mod) % mod); return 0; }
LL pow_mod(int a, int n, int m) { if (n == 1) return a % m; LL x = pow_mod(a, n / 2, m); LL ans = (x * x) % m; if (n % 2 == 1) ans = ans * a % m; return ans; }
/* *素性测试,Miller_Rabin 测试算法 *if n < 3,215,031,751, just test a = 2, 3, 5, and 7; *if n < 4,759,123,141, just test a = 2, 7, and 61; *if n < 1,122,004,669,633, just test a = 2, 13, 23, and 1662803; *if n < 2,152,302,898,747, just test a = 2, 3, 5, 7, and 11; *if n < 3,474,749,660,383, just test a = 2, 3, 5, 7, 11, and 13; *if n < 341,550,071,728,321, just test a = 2, 3, 5, 7, 11, 13, and 17. *if n < 3,825,123,056,546,413,051, just test a = 2, 3, 5, 7, 11, 13, 17, 19, and 23. *if n < 18,446,744,073,709,551,616 = 2^64, just test a = 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, and 37. */ bool test(ll x, ll n) { ll m = n - 1; while (!(m&1)) m >>= 1; x = pow_mod(x, m, n); for (; m<n-1 && x!=1 && x!=n-1; m<<=1) { x = mul_mod(x, x, n); //防爆long long } return x == n-1 || (m&1) == 1; }
// Public library function. Returns NULL if successful, a string starting with "I/O error: " // if an I/O error occurred (please see perror()), or a string if some other error occurred. const char *modify_file_crc32(const char *path, uint64_t offset, uint32_t newcrc, bool printstatus) { FILE *f = fopen(path, "r+b"); if (f == NULL) return "I/O error: fopen"; // Read entire file and calculate original CRC-32 value. // Note: We can't use fseek(f, 0, SEEK_END) + ftell(f) to determine the length of the file, due to undefined behavior. // To be portable, we also avoid using POSIX fseeko()+ftello() or Windows GetFileSizeEx()/_filelength(). uint64_t length; uint32_t crc = get_crc32_and_length(f, &length); if (offset > UINT64_MAX - 4 || offset + 4 > length) { fclose(f); return "Error: Byte offset plus 4 exceeds file length"; } if (printstatus) fprintf(stdout, "Original CRC-32: %08" PRIX32 "\n", reverse_bits(crc)); // Compute the change to make uint32_t delta = crc ^ newcrc; delta = (uint32_t)multiply_mod(reciprocal_mod(pow_mod(2, (length - offset) * 8)), delta); // Patch 4 bytes in the file fseek64(f, offset); for (int i = 0; i < 4; i++) { int b = fgetc(f); if (b == EOF) { fclose(f); return "I/O error: fgetc"; } b ^= (int)((reverse_bits(delta) >> (i * 8)) & 0xFF); if (fseek(f, -1, SEEK_CUR) != 0) { fclose(f); return "I/O error: fseek"; } if (fputc(b, f) == EOF) { fclose(f); return "I/O error: fputc"; } if (fflush(f) == EOF) { fclose(f); return "I/O error: fflush"; } } if (printstatus) fprintf(stdout, "Computed and wrote patch\n"); // Recheck entire file bool match = get_crc32_and_length(f, &length) == newcrc; fclose(f); if (match) { if (printstatus) fprintf(stdout, "New CRC-32 successfully verified\n"); return NULL; // Success } else return "Assertion error: Failed to update CRC-32 to desired value"; }
vector<int> multiply(vector<int> u, vector<int> v) { // the same as the complex version nth_root.clear(); int r = pow_mod(ROOT, (MOD - 1) / n, MOD); for (int i = 0, tmp = 1; i < n; ++i) { nth_root.push_back(tmp); tmp = (long long)tmp * r % MOD; } int inv = inverse(n, MOD); return ret; }
int main() { int T, n, k, m, a; scanf("%d", &T); for(int i = 1; i <= T; i++) { scanf("%d", &n); long long ans = pow_mod(2,n-1,MOD) * n % MOD; printf("Case #%d: %d\n", i, (int)ans); } return 0; }
//以a为基,n-1=x*2^t a^(n-1)=1(mod n) 验证n是不是合数 //一定是合数返回true,不一定返回false bool check(long long a,long long n,long long x,long long t){ long long ret=pow_mod(a,x,n); long long last=ret; for(int i=1;i<=t;i++){ ret=mult_mod(ret,ret,n); if(ret==1&&last!=1&&last!=n-1) return true;//合数 last=ret; } if(ret!=1) return true; return false; }
int main() { int t,n; while(scanf("%d",&t)!=EOF) while(t--) { scanf("%d",&n); printf("%lld\n",pow_mod(2,n-1,mod)-1); } return 0; }
void fermat_test(const int n, int* p, int* np) { *p = *np = 0; int a; #pragma omp parallel for private(a) for ( a=2; a < n; a++) { if ( pow_mod(a, n, n) == a) *p += 1; else *np +=1; } }
bool test(int n, int a, int d) { if (n == 2) return true; if (n == a) return true; if ((n & 1) == 0) return false; while (!(d & 1)) d = d >> 1; int t = pow_mod(a, d, n); while ((d != n - 1) && (t != 1) && (t != n - 1)) { t = (long long)t * t % n; d = d << 1; } return (t == n - 1 || (d & 1) == 1); }
// Solve the congruence x^2 = n (mod p). void tonelli_shanks(uint32_t n, uint32_t p, uint32_t *result) { if(p == 2) { result[0] = n; result[1] = n; return; } uint64_t S = 0; uint64_t Q = p - 1; while(Q % 2 == 0) { Q /= 2; ++S; } uint64_t z = 2; while(legendre_symbol(z, p) != -1) ++z; uint64_t c = pow_mod(z, Q, p); uint64_t R = pow_mod(n, (Q + 1) / 2, p); uint64_t t = pow_mod(n, Q, p); uint64_t M = S; while(t % p != 1) { int32_t i = 1; while(pow_mod(t, pow(2, i), p) != 1) ++i; uint64_t b = pow_mod(c, pow(2, M - i - 1), p); R = R * b % p; t = t * b * b % p; c = b * b % p; M = i; } result[0] = R; result[1] = p - R; }
int modsqr(int a,int b=n) { int b,k,i,x; if(n==2)return a%n; if(pow_mod(a,(n-1)/2,n)==1) { if(n%4==3) { x=pow_mod(a,(n+1)/4,n); } else { for(b=1;pow_mod(b,(n-1)/2,n)==1;b++); i=(n-1)/2; k=0; do { i/=2;k/=2; if((pow_mod(a,i,n)*(long long)pow(b,k,n)+1)%n==0) k+=(n-1)/2; }while(i%2=0); x=(pow_mod(a,(i+1)/2,n)*(long long)pow_mod(b,k/2,n))%n; } if(x*2>n) { x=n-x; } return x; } return -1; }
int main() { scanf("%s", s); scanf("%s", t); int n = strlen(s); int k; scanf("%d", &k); long long cnt = (pow_mod(n - 1, k) + (k & 1 ? 1 : -1)) * pow_mod(n, mod - 2) % mod; long long cnt0 = cnt - (k & 1 ? 1 : -1); long long ans = 0; for (int i = 0; i < n; ++i) { bool flag = true; for (int j = 0; j < n; ++j) if (s[j] != t[(j + i) % n]) flag = false; if (flag) ans = (ans + (i == 0 ? cnt0 : cnt)) % mod; } printf("%I64d\n", (ans + mod) % mod); return 0; }
int rsa_sign(unsigned char** result, unsigned char* hash, unsigned int hashLengthBytes, unsigned char* privateKey, unsigned char* modulus, unsigned int keyLengthBytes){ if(hashLengthBytes>(keyLengthBytes-11)){ return 0; } unsigned char* padded=new unsigned char[keyLengthBytes]; add_PKCS1_padding(padded,hash,hashLengthBytes,false,keyLengthBytes); int r=pow_mod(result,padded,privateKey,modulus,keyLengthBytes); return r; }
bool solve(int n) { for (int i = 0; i <= 23; ++i) { int s = 1 << i; if (i != 23 && pow_mod(n, s * 3 * 5 * 7) == 1) return false; if (pow_mod(n, s * 3 * 5 * 1) == 1) return false; if (pow_mod(n, s * 3 * 1 * 7) == 1) return false; if (pow_mod(n, s * 3 * 1 * 1) == 1) return false; if (pow_mod(n, s * 1 * 5 * 7) == 1) return false; if (pow_mod(n, s * 1 * 5 * 1) == 1) return false; if (pow_mod(n, s * 1 * 1 * 7) == 1) return false; if (pow_mod(n, s * 1 * 1 * 1) == 1) return false; } return true; }
inline int calc(int a, int p) { if (a < 2) return a; if (!quad_resi(a, p)) return p; // no solution if (p % 4 == 3) return pow_mod(a, (p + 1) / 4, p); int b = 0; while (quad_resi((my_sqr(b) - a + p) % p, p)) b = rand() % p; quad_poly ret = quad_poly(b, 1, (my_sqr(b) - a + p) % p, p); ret = ret.pow((p + 1) / 2); return ret.zero; }
bool witness(LL a, LL n, LL x, LL t) //以a为基,n-1=x*2^t,检验n是不是合数 { LL ret = pow_mod(a, x, n); LL last = ret; for (int i = 1; i <= t; i++) { ret = muti_mod(ret, ret, n); if (ret == 1 && last != 1 && last != n - 1) return 1; last = ret; } if (ret != 1) return 1; return 0; }
bool test(long long n, long long a, long long d) { if (n == 2) return true; if (n == a) return true; if ((n & 1) == 0) return false; while(!(d & 1)) d = d >> 1; long long t = pow_mod(a, d, n); while((d != n - 1) && (t != 1) && (t != n - 1)) { t = t * t % n; d = d << 1; } return (t == n - 1 || (d & 1) == 1); }
bool check(LL a, LL n, LL x, LL t) { //以a为基,n-1=x*2^t,检验n是不是合数 LL ret = pow_mod(a, x, n), last = ret; for (int i = 1; i <= t; i++) { ret = multi_mod(ret, ret, n); if (ret == 1 && last != 1 && last != n - 1) return 1; last = ret; } if (ret != 1) return 1; return 0; }
bool Wintess(int64 aa, int64 n, int64 mod) /*是以aa为底的伪质数返回0,是合数返回1*/ { int t = 0; while ((n & 1) == 0){ /*n = d * 2^t; n = d;*/ n >>= 1; ++ t; } int64 x = pow_mod(aa, n, mod), y; while (t --){ y = mul_mod (x, x, mod); if (y == 1 && x != 1 && x != mod-1) return 1; x = y; } return (y != 1); }
// get a^p mod n int pow_mod(int a, int n, int p){ if (p == 1) { return a; } int half_p = p/2; int q = p%2; int t; //#pragma omp task shared(t) t = pow_mod(a, n, half_p); int r = (t*t) %n; //#pragma omp taskwait if (q==0) return r; else return ((r*a)%n); }