zoukankan      html  css  js  c++  java
  • 【数论】【Polya定理】【枚举约数】【欧拉函数】【Java】poj2154 Color

    你随便写一下出来,发现polya原理的式子里面好多gcd是相同的,gcd(n,i)=k可以改写成gcd(n/k,i/k)=1,也就是说指数为k的项的个数为phi(n/k),就很好求了,最后除的那个n直接放到指数上即可,没必要用逆元。

    import java.util.*;
    import java.io.*;
    
    public class Main {
    	public static int phi(int n){
    		int ans=n;
    		for(int i=2;i*i<=n;++i){
    			if(n%i==0){
    				ans=ans/i*(i-1);
    				while(n%i==0){
    					n/=i;
    				}
    			}
    		}
    		if(n>1){
    			ans=ans/n*(n-1);
    		}
    		return ans;
    	}
    	public static int Quick_Pow(int x,int p,int MOD){
    		if(p==0){
    			return 1;
    		}
    		int ans=Quick_Pow(x,p>>1,MOD);
    		ans=(ans*ans)%MOD;
    		if((p&1)==1){
    			ans=(x%MOD*ans)%MOD;
    		}
    		return ans;
    	}
    	public static void main(String[] argc){
    		int T,n,P;
    		Scanner sc = new Scanner (new BufferedInputStream(System.in));
    		T=sc.nextInt();
    		for(int zu=1;zu<=T;++zu){
    			int ans=0;
    			n=sc.nextInt();
    			P=sc.nextInt();
    			for(int i=1;i*i<=n;++i){
    				if(n%i==0){
    					ans=(ans+((phi(n/i)%P)*Quick_Pow(n,i-1,P))%P)%P;
    //					System.out.printf("Test:%d
    ",ans);
    					if(i*i!=n){
    						ans=(ans+((phi(i)%P)*Quick_Pow(n,n/i-1,P))%P)%P;
    //						System.out.printf("Test:%d
    ",ans);
    					}
    				}
    			}
    			System.out.println(ans);
    		}
    		sc.close();
        }
    }
  • 相关阅读:
    composer国内镜像配置
    composer.json和composer.lock作用
    工厂模式(描述语言PHP)
    PHP后期静态绑定
    js事件冒泡和事件捕获
    去帮助别人,并接受别人的帮助
    平静,问题本身也是问题
    总是被欲望折磨的我
    习惯产生力量
    秦岭野生动物园
  • 原文地址:https://www.cnblogs.com/autsky-jadek/p/6680665.html
Copyright © 2011-2022 走看看