hdu 3547 DIY Cube (Ploya定理)

DIY Cube

Time Limit: 2000/2000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)

Total Submission(s): 584    Accepted Submission(s): 284

Problem Description

Mr. D is interesting in combinatorial enumeration. Now he want to find out the number of ways on painting the vertexes of a cube. Suppose there are C different colors and two paintings are considered the same if they can transform from one to another by rotation.

Input

There are multiple test cases in the input, the first line of input contains an integer denoting the number of test cases.

For each test case, there are only one integer C, denoting the number of colors. (1 <= C <= 1000000000)

Output

For each test case, output the the number of painting ways. And if the number is equal or larger than 1015, output the last 15 digits.

Sample Input

3
1
2
112

Sample Output

Case 1: 1
Case 2: 23

Case 3: 031651434916928

/*
 * 题意:用n中颜色涂一个正方体的八个顶点,求有多少种方法。

假设得到的结果大于等于10^15,则输出后15位就可以。
思路:Ploya定理啊,是组合数学课本上的原题。相应于四种不同类型的旋转,1:不动,即恒等旋转有1个;2:绕三对对立面的中心旋转,有旋转90度,旋转180度,旋转270度,分别有3个;3:绕对边终点连线旋转,有6个。4:绕对角点旋转,有旋转120度和旋转240度,分别有4个。因此共同拥有24个对称。最后能够转化成公式(k^8 + 17*k^4 + 6 * k^2)/ 24 。
因为涉及到了大数,所以这道题我使用java写的,刚学java。

看着大神的分析,写了写试试。java单词好多。
 */
import java.util.*;
import java.math.*;
import java.math.BigInteger;
public class Main {
	public static void main(String[] args){
		int i,j;
		BigInteger sum,k,temp;
		temp= new BigInteger ("1000000000000000");
		Scanner in=new Scanner(System.in);
		int t=in.nextInt();
		for(i=1;i<=t;i++){
			sum= BigInteger.ZERO;
			k=in.nextBigInteger();
			sum=sum.add(k.pow(8));
			sum=sum.add(k.pow(4).multiply(BigInteger.valueOf(17)));
			sum=sum.add(k.pow(2).multiply(BigInteger.valueOf(6)));
			sum=sum.divide(BigInteger.valueOf(24));
			System.out.print("Case "+i+": ");
			if(sum.compareTo(temp) > 0){
				sum= sum.mod(temp);
				for(j=sum.toString().length(); j<15;j++){
					System.out.print(0);
				}
			}
			System.out.println(sum);
		}
	}
}
时间: 2024-10-13 02:06:03

hdu 3547 DIY Cube (Ploya定理)的相关文章

HDOJ 3547 DIY Cube 解题报告

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3547 题目大意:求用$C$种颜色给立方体的8个顶点染色的本质不同的方法.两种方法本质不同即不能通过旋转立方体使得两个立方体的染色情况一致. 简要题解:首先可以得到有24种组合旋转方式.根据Polya定理以及群论中的拉格朗日定理,然后再自己多想一想,就可以得到:$Ans=\frac{x^8+Ax^4+Bx^2+Cx}{24}$,可知有3个未知数,然后样例正好有3组数据,所以可以解方程解得$A=17,B

hdu 3547 (polya定理 + 小高精)

DIY CubeTime Limit: 2000/2000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 207    Accepted Submission(s): 111 Problem Description Mr. D is interesting in combinatorial enumeration. Now he want to find out the numb

hdu 4651 Partition (利用五边形定理求解切割数)

下面内容摘自维基百科: 五边形数定理[编辑] 五边形数定理是一个由欧拉发现的数学定理,描写叙述欧拉函数展开式的特性[1] [2].欧拉函数的展开式例如以下: 亦即 欧拉函数展开后,有些次方项被消去,仅仅留下次方项为1, 2, 5, 7, 12, ...的项次,留下来的次方恰为广义五边形数. 当中符号为- - + + - - + + ..... 若将上式视为幂级数,其收敛半径为1,只是若仅仅是当作形式幂级数(formal power series)来考虑,就不会考虑其收敛半径. 和切割函数的关系

hdu 4651 Partition (利用五边形定理求解分割数)

以下内容摘自维基百科: 五边形数定理[编辑] 五边形数定理是一个由欧拉发现的数学定理,描述欧拉函数展开式的特性[1] [2].欧拉函数的展开式如下: 亦即 欧拉函数展开后,有些次方项被消去,只留下次方项为1, 2, 5, 7, 12, ...的项次,留下来的次方恰为广义五边形数. 其中符号为- - + + - - + + ..... 若将上式视为幂级数,其收敛半径为1,不过若只是当作形式幂级数(formal power series)来考虑,就不会考虑其收敛半径. 和分割函数的关系 欧拉函数的倒

hdu 4704 费马小定理+快速幂

题意就是:做整数拆分,答案是2^(n-1) 由费马小定理可得:2^n % p = 2^[ n % (p-1) ]  % p 当n为超大数时,对其每个数位的数分开来加权计算 当n为整型类型时,用快速幂的方法求解 #include<iostream> #include<cstdio> #include<cstring> #include<string> #include<algorithm> using namespace std; const in

HDU 4801 Pocket Cube BFS

链接:http://vjudge.net/contest/view.action?cid=51289#problem/K 题意:给一个小魔方(每面只有四个小块),每个小块有自己的颜色(一共六种颜色,每种颜色四块),问经过最多N次操作(N<=7),每次操作是将魔方某一面转动90度,最多能使多少个面的四个小块颜色都相同. 思路:每次操作产生6种状态,(向前,向后,向左,向右,向上,向下,左半魔方向前和右半魔方向后的操作产生的状态本质是一样的)直接BFS搜索,可能产生的状态一共有6^7种,中间比较麻烦

hdu 3807【最大最小定理】

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3870 这道题是一道裸的求割问题也即求最大流,但是使用一般网络流这道 题会超时,这是这道题的难点,但是鉴于这道题的图的特殊性,可以 用最大最小定理来求割,这边是这道题的考察点. 推荐诸君看一下最大最小个定理,推荐链接: http://www.doc88.com/p-386772667290.html 献上代码: #include<stdio.h> #include<string.h> #

HDU 4801 Pocket Cube(模拟题——转魔方)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4801 题面: Pocket Cube Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 882    Accepted Submission(s): 271 Problem Description Pocket Cube is a 3-D

HDU 3037 Saving Beans (Lucas定理)

/*求在n棵树上摘不超过m颗豆子的方案,结果对p取模. 求C(n+m,m)%p. 因为n,m很大,这里可以直接套用Lucas定理的模板即可. Lucas(n,m,p)=C(n%p,m%p,p)*Lucas(n/p,m/p,p): ///这里可以采用对n分段递归求解, Lucas(x,0,p)=1: 将n,m分解变小之后问题又转换成了求C(a/b)%p. 而C(a,b) =a! / ( b! * (a-b)! ) mod p 其实就是求 ( a! / (a-b)!) * ( b! )^(p-2)