哈哈哈,簡單polya,公式自己推導。
不過這題需要用到大數,很久沒寫Java,調了好久。
import java.math.*;
import java.util.*;
import java.io.*;
public class Main{
public static void main(String args[]){
Scanner cin=new Scanner(System.in);
int n;
BigInteger c;
while(cin.hasNextInt())
{
BigInteger ans=BigInteger.valueOf(0),tmp;
n=cin.nextInt();
c=cin.nextBigInteger();
int k=n%2; //奇數的話,在中間有個不動點
ans=ans.add(c.pow(n*n)); //0度
ans=ans.add(c.pow((n*n-k)/4+k)); //90度
ans=ans.add(c.pow((n*n-k)/2+k)); //180
ans=ans.add(c.pow((n*n-k)/4+k)); //270
// System.out.println(ans);
if(n%2==0){
tmp=c.pow(n*n/2);
ans=ans.add(tmp.multiply(BigInteger.valueOf(2)));
tmp=c.pow(n*(n-1)/2+n);
ans=ans.add(tmp.multiply(BigInteger.valueOf(2)));
}
else{
tmp=c.pow(n*(n-1)/2+n);
ans=ans.add(tmp.multiply(BigInteger.valueOf(4)));
}
ans=ans.divide(BigInteger.valueOf(8));
System.out.println(ans);
}
}
}