zoukankan      html  css  js  c++  java
  • BZOJ3884 上帝与集合的正确用法 【欧拉定理】

    题目

    对于100%的数据,T<=1000,p<=10^7

    题解

    来捉这道神题

    欧拉定理的一般形式:

    [a^{m} equiv a^{m mod varphi(p) + [m ge varphi(p)]varphi(p)} pmod p ]

    我们令

    [ans(p) = 2^{2^{2^{...}}} mod p ]

    那么有

    [ans(p) = 2^{ans(varphi(p)) + varphi(p)} mod p ]

    (O(log p))递归即可

    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<bitset>
    #include<cstring>
    #include<algorithm>
    #define LL long long int
    #define Redge(u) for (int k = h[u],to; k; k = ed[k].nxt)
    #define REP(i,n) for (int i = 1; i <= (n); i++)
    #define BUG(s,n) for (int i = 1; i <= (n); i++) cout<<s[i]<<' '; puts("");
    using namespace std;
    const int maxn = 10000005,maxm = 100005,INF = 1000000000;
    inline int read(){
    	int out = 0,flag = 1; char c = getchar();
    	while (c < 48 || c > 57){if (c == '-') flag = -1; c = getchar();}
    	while (c >= 48 && c <= 57){out = (out << 3) + (out << 1) + c - 48; c = getchar();}
    	return out * flag;
    }
    bitset<maxn> isn;
    int p[maxn],phi[maxn],pi;
    void init(){
    	phi[1] = 1;
    	for (int i = 2; i <= 10000000; i++){
    		if (!isn[i]) p[++pi] = i,phi[i] = i - 1;
    		for (int j = 1; j <= pi && i * p[j] <= 10000000; j++){
    			isn[i * p[j]] = true;
    			if (i % p[j] == 0){
    				phi[i * p[j]] = phi[i] * p[j];
    				break;
    			}
    			phi[i * p[j]] = phi[i] * (p[j] - 1);
    		}
    	}
    }
    int qpow(int a,int b,int p){
    	int ans = 1;
    	for (; b; b >>= 1,a = 1ll * a * a % p)
    		if (b & 1) ans = 1ll * ans * a % p;
    	return ans;
    }
    int Ans(int p){
    	if (p == 1) return 0;
    	return qpow(2,Ans(phi[p]) + phi[p],p);
    }
    int main(){
    	init();
    	int T = read(),p;
    	while (T--){
    		p = read();
    		printf("%d
    ",Ans(p));
    	}
    	return 0;
    }
    
    
  • 相关阅读:
    eclipse快捷键
    NetBeans无法使用svn相关功能
    sqlplus执行startup出现ORA-00119,ORA-00132错误
    Oracle中对number类型数据to_char()出现各位少0,或者值为###的处理
    服务器启动报mybatis配置错误
    Java Thread interrupt
    nginx backend 健康检查
    SSH 安全建议
    ARP
    Postgresql 锁查看
  • 原文地址:https://www.cnblogs.com/Mychael/p/8964263.html
Copyright © 2011-2022 走看看