zoukankan      html  css  js  c++  java
  • luogu P4139 上帝与集合的正确用法(扩展欧拉定理)

    本蒟蒻现在才知带扩展欧拉定理。
    对于任意的(bgeqvarphi(p))
    (a^bequiv a^{b mod varphi(p)+varphi(p)}(mod p))
    (b<varphi(p))
    (a^bequiv a^{b mod varphi(p)}(mod p))
    (b)(p)可以不互质
    然后这题就简单了。。。

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    #include<cmath>
    #include<algorithm>
    using namespace std;
    const int N=1e7+100;
    #define int long long
    int phi[N],prime[N],num,p,t;
    bool book[N];
    int read(){
    	int sum=0,f=1;char ch=getchar();
    	while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    	while(ch>='0'&&ch<='9'){sum=sum*10+ch-'0';ch=getchar();}
    	return sum*f;
    }
    void prework(int n){
    	phi[1]=1;
    	for(int i=2;i<=n;i++){
    		if(book[i]==0){
    			phi[i]=i-1;
    			prime[++num]=i;
    		}
    		for(int j=1;i*prime[j]<=n&&j<=num;j++){
    			book[i*prime[j]]=1;
    			if(i%prime[j]==0){
    				phi[i*prime[j]]=phi[i]*prime[j];
    				break;
    			}
    			else phi[i*prime[j]]=phi[i]*(prime[j]-1);
    		}
    	}
    }
    int ksm(int x,int b,int mod){
    	int tmp=1;
    	while(b){
    		if(b&1)tmp=tmp*x%mod;
    		b>>=1;
    		x=x*x%mod; 
    	}
    	return tmp;
    }
    int dfs(int x){
    	if(x==2)return 0;
    	return ksm(2,dfs(phi[x])+phi[x],x);
    }
    signed main(){
    	prework(1e7);
    	t=read();
    	while(t--){
    		p=read();
    		printf("%lld
    ",dfs(p)); 
    	}
    	return 0;
    }
    
  • 相关阅读:
    Perl 简介
    一定时间后延时变长问题
    CPAN常见问题集
    J2SE简介
    brian的Perl问题之万能指南
    清洁工 VS 亿万富翁
    关于VC中的"stdafx.h"
    Perl模式匹配
    wiki介绍
    生活中10大省钱小秘诀 白领一族"必备诀窍"
  • 原文地址:https://www.cnblogs.com/Xu-daxia/p/10147354.html
Copyright © 2011-2022 走看看