伪装序列(II)【难度:2级】:答案1:using System;using System.Numerics;public class Disguised2{ private static BigInteger Choose(int n, int p) { BigInteger ret = new BigInteger(1); for ...
摘要由CSDN通过智能技术生成
伪装序列(II)【难度:2级】:
答案1:
using System;using System.Numerics;publicclassDisguised2{privatestaticBigIntegerChoose(int n,int p){BigInteger ret =newBigInteger(1);for(int i =0; i < p; i++){
ret = BigInteger.Multiply(ret, n - i);
ret = BigInteger.Divide(ret, i +1);}return ret;}publicstaticBigIntegerU1(int n,int p){BigInteger sm =newBigInteger(0);BigInteger b1 =newBigInteger(-1);BigInteger b2 =newBigInteger(4);int k =0;while(k <= n){
sm = BigInteger.Add(sm,
BigInteger.Multiply(BigInteger.Multiply(BigInteger.Pow(b1, k), BigInteger.Pow(b2, n-k)),Choose(2*n-k+1, k)));
k +=1;}return BigInteger.Multiply(newBigInteger(p), sm);}publicstaticBigIntegerV1(int n,int p){BigInteger sm =newBigInteger(0);BigInteger b1 =newBigInteger(-1);BigInteger b2 =newBigInteger(4);int k =0;while(k <= n){
sm = BigInteger.Add(sm,
BigInteger.Multiply(BigInteger.Multiply(BigInteger.Pow(b1, k), BigInteger.Pow(b2, n-k)),Choose(2*n-k, k)));
k +=1;}return BigInteger.Multiply(newBigInteger(p), sm);}publicstaticBigIntegerUEff(int n,int p){return BigInteger.Multiply(newBigInteger(p),newBigInteger(n+1));}publicstaticBigIntegerVEff(int n,int p){return BigInteger.Multiply(newBigInteger(p),newBigInteger(2*n+1));}}
答案2:
using System;using System.Linq;using System.Numerics;publicclassDisguised2{publicstaticBigIntegerU1(int n,int p){var result = BigInteger.Zero;for(var k =0; k <= n; k++){
result +=(int)Math.Pow(-1, k %2)*p* BigInteger.Pow(4, n - k)*Choose(2* n - k +1, k);}return result;}publicstaticBigIntegerV1(int n,int p){var result = BigInteger.Zero;for(var k =0; k <= n; k++){
result +=(int)Math.Pow(-1, k %2)*p* BigInteger.Pow(4, n - k)*Choose(2* n - k, k);}return result;}privatestaticBigIntegerChoose(int n,int k){
k = Math.Min(k, n - k);var result = BigInteger.One;for(int i =1, j = n; i <= k; i++, j--) result = result * j / i;return result;}publicstaticBigIntegerUEff(int n,int p)=>(n +1)* p;publicstaticBigIntegerVEff(int n,int p)=>(2* n +1)* p;}
答案3:
using System;using System.Numerics;publicclassDisguised2{publicstaticBigIntegerU1(int n,int p){var sum =newBigInteger(0);for(int k=0;k<=n;k++){int sign = k%2==1?-1:1;var m =Pow(4,n-k);
m *= sign *BinomCoefficient(2*n-k+1,k);
sum += m;}return p*sum;}publicstaticBigIntegerV1(int n,int p){var sum =newBigInteger(0);for(int k=0;k<=n;k++){int sign = k%2==1?-1:1;var m =Pow(4,n-k);
m *= sign *BinomCoefficient(2*n-k,k);
sum += m;}return p*sum;}publicstaticBigIntegerPow(int x,int y){var p =newBigInteger(1);for(int i=0;i<y;i++)
p *= x;return p;}publicstaticBigIntegerUEff(int n,int p){return p*(n+1);}publicstaticBigIntegerVEff(int n,int p){return p*(2*n+1);}publicstaticBigIntegerBinomCoefficient(long n,long k){if(k > n){return0;}if(n == k){return1;}// only one way to chose when n == kif(k > n - k){ k = n - k;}// Everything is symmetric around n-k, so it is quicker to iterate over a smaller k than a larger one.BigInteger c =newBigInteger(1);for(long i =1; i <= k; i++){
c *= n--;
c /= i;}return c;}}
using System.Numerics;publicclassDisguised2{publicstaticBigIntegerU1(int n,int p ){BigInteger sum =0;for(int i =0; i <= n; i++){var s = BigInteger.Pow(-1, i );
sum += s*p*BigInteger.Pow(4, n - i )*C(2*n - i +1, i );}return sum;}publicstaticBigIntegerV1(int n,int p ){BigInteger sum =0;for(int i =0; i <= n; i++){var s = BigInteger.Pow(-1, i );
sum += s*p*BigInteger.Pow(4, n - i )*C(2*n - i, i );}return sum;}publicstaticBigIntegerUEff(int n,int p ){return n*p + p;}publicstaticBigIntegerVEff(int n,int p ){return2*( n*p )+ p;}privatestaticBigIntegerC(BigInteger n,BigInteger k ){if( k > n ){return0;}BigInteger r =1;for(BigInteger d =1; d <= k; d++){
r *= n--;
r /= d;}return r;}}
答案6:
using System.Numerics;publicclassDisguised2{publicstaticBigIntegerU1(int n,int p)=> p *(n +newBigInteger(1));publicstaticBigIntegerV1(int n,int p)=> p *(newBigInteger(2)* n +newBigInteger(1));publicstaticBigIntegerUEff(int n,int p)=> p *(n +newBigInteger(1));publicstaticBigIntegerVEff(int n,int p)=> p *(newBigInteger(2)* n +newBigInteger(1));}
答案7:
using System.Numerics;publicclassDisguised2{publicstaticBigIntegerU1(int n,int p)=>newBigInteger(p)*(n +1);publicstaticBigIntegerV1(int n,int p)=>newBigInteger(p)*(2* n +1);publicstaticBigIntegerUEff(int n,int p)=>U1(n, p);publicstaticBigIntegerVEff(int n,int p)=>V1(n, p);}
伪装序列(II)【难度:2级】:答案1:using System;using System.Numerics;public class Disguised2{ private static BigInteger Choose(int n, int p) { BigInteger ret = new BigInteger(1); for ...