个人网站建设及实现,网站策划书背景介绍怎么写,做外贸国外网站,团购网站自个做polya自主ac的第一道#xff0c;讨论方法#xff1a;先把奇偶分开(1)顺时针0度#xff0c;90度#xff0c;180度#xff0c;270度 (2)镜像竖线#xff0c;水平线#xff0c;两条对角线。分别推出公式计算#xff0c;实在推不出来#xff0c;写个模拟暴力找循环节… polya自主ac的第一道讨论方法先把奇偶分开(1)顺时针0度90度180度270度 (2)镜像竖线水平线两条对角线。分别推出公式计算实在推不出来写个模拟暴力找循环节找规律然后发现还要写大数就贴了个模板呢。。。后边补了java版。ac代码 #includeiostream
#includestring
#include cstdio
#include cstring
#includeiomanip
#includealgorithm
using namespace std;#define MAXN 9999
#define MAXSIZE 10
#define DLEN 4class BigNum
{
private:int a[500]; //可以控制大数的位数int len; //大数长度
public:BigNum(){ len 1;memset(a,0,sizeof(a)); } //构造函数BigNum(const int); //将一个int类型的变量转化为大数BigNum(const char*); //将一个字符串类型的变量转化为大数BigNum(const BigNum ); //拷贝构造函数BigNum operator(const BigNum ); //重载赋值运算符大数之间进行赋值运算friend istream operator(istream, BigNum); //重载输入运算符friend ostream operator(ostream, BigNum); //重载输出运算符BigNum operator(const BigNum ) const; //重载加法运算符两个大数之间的相加运算BigNum operator-(const BigNum ) const; //重载减法运算符两个大数之间的相减运算BigNum operator*(const BigNum ) const; //重载乘法运算符两个大数之间的相乘运算BigNum operator/(const int ) const; //重载除法运算符大数对一个整数进行相除运算BigNum operator^(const int ) const; //大数的n次方运算int operator%(const int ) const; //大数对一个int类型的变量进行取模运算bool operator(const BigNum T)const; //大数和另一个大数的大小比较bool operator(const int t)const; //大数和一个int类型的变量的大小比较void print(); //输出大数
};
BigNum::BigNum(const int b) //将一个int类型的变量转化为大数
{int c,d b;len 0;memset(a,0,sizeof(a));while(d MAXN){c d - (d / (MAXN 1)) * (MAXN 1);d d / (MAXN 1);a[len] c;}a[len] d;
}
BigNum::BigNum(const char*s) //将一个字符串类型的变量转化为大数
{int t,k,index,l,i;memset(a,0,sizeof(a));lstrlen(s);lenl/DLEN;if(l%DLEN)len;index0;for(il-1;i0;i-DLEN){t0;ki-DLEN1;if(k0)k0;for(int jk;ji;j)tt*10s[j]-0;a[index]t;}
}
BigNum::BigNum(const BigNum T) : len(T.len) //拷贝构造函数
{int i;memset(a,0,sizeof(a));for(i 0 ; i len ; i)a[i] T.a[i];
}
BigNum BigNum::operator(const BigNum n) //重载赋值运算符大数之间进行赋值运算
{int i;len n.len;memset(a,0,sizeof(a));for(i 0 ; i len ; i)a[i] n.a[i];return *this;
}
istream operator(istream in, BigNum b) //重载输入运算符
{char ch[MAXSIZE*4];int i -1;inch;int lstrlen(ch);int count0,sum0;for(il-1;i0;){sum 0;int t1;for(int j0;j4i0;j,i--,t*10){sum(ch[i]-0)*t;}b.a[count]sum;count;}b.len count;return in;}
ostream operator(ostream out, BigNum b) //重载输出运算符
{int i;cout b.a[b.len - 1];for(i b.len - 2 ; i 0 ; i--){cout.width(DLEN);cout.fill(0);cout b.a[i];}return out;
}BigNum BigNum::operator(const BigNum T) const //两个大数之间的相加运算
{BigNum t(*this);int i,big; //位数big T.len len ? T.len : len;for(i 0 ; i big ; i){t.a[i] T.a[i];if(t.a[i] MAXN){t.a[i 1];t.a[i] -MAXN1;}}if(t.a[big] ! 0)t.len big 1;elset.len big;return t;
}
BigNum BigNum::operator-(const BigNum T) const //两个大数之间的相减运算
{int i,j,big;bool flag;BigNum t1,t2;if(*thisT){t1*this;t2T;flag0;}else{t1T;t2*this;flag1;}bigt1.len;for(i 0 ; i big ; i){if(t1.a[i] t2.a[i]){j i 1;while(t1.a[j] 0)j;t1.a[j--]--;while(j i)t1.a[j--] MAXN;t1.a[i] MAXN 1 - t2.a[i];}elset1.a[i] - t2.a[i];}t1.len big;while(t1.a[len - 1] 0 t1.len 1){t1.len--;big--;}if(flag)t1.a[big-1]0-t1.a[big-1];return t1;
}BigNum BigNum::operator*(const BigNum T) const //两个大数之间的相乘运算
{BigNum ret;int i,j,up;int temp,temp1;for(i 0 ; i len ; i){up 0;for(j 0 ; j T.len ; j){temp a[i] * T.a[j] ret.a[i j] up;if(temp MAXN){temp1 temp - temp / (MAXN 1) * (MAXN 1);up temp / (MAXN 1);ret.a[i j] temp1;}else{up 0;ret.a[i j] temp;}}if(up ! 0)ret.a[i j] up;}ret.len i j;while(ret.a[ret.len - 1] 0 ret.len 1)ret.len--;return ret;
}
BigNum BigNum::operator/(const int b) const //大数对一个整数进行相除运算
{BigNum ret;int i,down 0;for(i len - 1 ; i 0 ; i--){ret.a[i] (a[i] down * (MAXN 1)) / b;down a[i] down * (MAXN 1) - ret.a[i] * b;}ret.len len;while(ret.a[ret.len - 1] 0 ret.len 1)ret.len--;return ret;
}
int BigNum::operator %(const int b) const //大数对一个int类型的变量进行取模运算
{int i,d0;for (i len-1; i0; i--){d ((d * (MAXN1))% b a[i])% b;}return d;
}
BigNum BigNum::operator^(const int n) const //大数的n次方运算
{BigNum t,ret(1);int i;if(n0)exit(-1);if(n0)return 1;if(n1)return *this;int mn;while(m1){t*this;for( i1;i1m;i1){tt*t;}m-i;retret*t;if(m1)retret*(*this);}return ret;
}
bool BigNum::operator(const BigNum T) const //大数和另一个大数的大小比较
{int ln;if(len T.len)return true;else if(len T.len){ln len - 1;while(a[ln] T.a[ln] ln 0)ln--;if(ln 0 a[ln] T.a[ln])return true;elsereturn false;}elsereturn false;
}
bool BigNum::operator (const int t) const //大数和一个int类型的变量的大小比较
{BigNum b(t);return *thisb;
}void BigNum::print() //输出大数
{int i;cout a[len - 1];for(i len - 2 ; i 0 ; i--){cout.width(DLEN);cout.fill(0);cout a[i];}cout endl;
}BigNum q_pow(BigNum a,int b) {BigNum ans BigNum(1);while(b) {if(b1)ans (ans*a);a (a*a);b1;}return ans;
}
int M, n;
int main()
{while(~scanf(%d%d,n,M)) {int cc0;BigNum m BigNum(M),ans BigNum(0);int t;if(n%20){t n*n;ans ans q_pow(m,t);t n*n/4;ans ans q_pow(m,t);t n*n/2;ans ans q_pow(m,t);t n*n/4;ans ans q_pow(m,t);t n*n/2;ans ans BigNum(2)*q_pow(m,t);t (n*n-n)/2n;ans ans BigNum(2)*q_pow(m,t);}else{t n*n;ans ans q_pow(m,t);t (n1)*(n-1)/4 1;ans ans q_pow(m,t);t (n1)*(n-1)/2 1;ans ans q_pow(m,t);t (n1)*(n-1)/4 1;ans ans q_pow(m,t);t (n*nn)/2;ans ans BigNum(4)*q_pow(m,t);}ans ans / 8;ans.print();}return 0;
}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);while (cin.hasNext()){int n cin.nextInt(),t;BigInteger ansBigInteger.valueOf(0),m cin.nextBigInteger();if(n%20) {ans ans.add(m.pow(n*n));ans ans.add(m.pow(n*n/4));ans ans.add(m.pow(n*n/4));ans ans.add(m.pow(n*n/2));ans ans.add(BigInteger.valueOf(2).multiply(m.pow((n*n)/2)));ans ans.add(BigInteger.valueOf(2).multiply(m.pow((n*nn)/2)));}else {ans ans.add(m.pow(n*n));ans ans.add(m.pow((n1)*(n-1)/41));ans ans.add(m.pow((n1)*(n-1)/21));ans ans.add(m.pow((n1)*(n-1)/41));ans ans.add(BigInteger.valueOf(4).multiply(m.pow((n*nn)/2)));}ans ans.divide(BigInteger.valueOf(8));System.out.println(ans);}}
}转载于:https://www.cnblogs.com/RRRR-wys/p/8955669.html