using System;publicclassPenta{publicstaticBooleanpNum(long n){return((Math.Sqrt(24* n +1)+1)/6)%1==0;}publicstaticBooleangpNum(long n){return Math.Sqrt(24* n +1)%1==0;}publicstaticBooleanspNum(long n){return Math.Sqrt(n)%1==0&&pNum(n);}}
答案2:
using System;publicclassPenta{publicstaticBooleanpNum(long n){int licznik =2;long a =1;while(a < n) a += licznik++*3-2;return a == n;}publicstaticBooleangpNum(long n){if(n <3)returntrue;int licznik =2;long a =1;while(a < n){
a += licznik++*3-2;if(a + licznik -1== n)returntrue;}return a == n;}publicstaticBooleanspNum(long n){if(pNum(n)){return(long)Math.Sqrt(n)*(long)Math.Sqrt(n)== n;}returnfalse;}}
答案3:
using System;publicclassPenta{privateconstdouble Tolerance =0.000000000001;publicstaticBooleanpNum(long n ){if( n ==0){returnfalse;}if(!gpNum( n )){returnfalse;}var r =( Math.Sqrt(24*n +1)+1)/6.0;returnIsNatural( r );}publicstaticBooleangpNum(long n ){if( n ==0){returntrue;}var t =24*n +1;returnIsPerfectSquare( t );}publicstaticBooleanspNum(long n ){returnpNum( n )&&IsPerfectSquare( n );}privatestaticboolIsPerfectSquare(long n ){var sqrt = Math.Sqrt( n );returnIsNatural( sqrt );}privatestaticboolIsNatural(double n ){return Math.Abs(( n -(int) n ))< Tolerance;}}
答案4:
using System;publicclassPenta{publicstaticboolTestIt(Func<long,long> func,long n){for(long i =0;; i++){var r =func(i);if(r == n)returntrue;if(r > n)returnfalse;}}publicstaticboolpNum(long n)=> n !=0&&TestIt(i => i *(3* i -1)/2, n);publicstaticboolgpNum(long n)=>TestIt(i =>(long)(Math.Ceiling(i /2.0)* Math.Ceiling((3* i +1)/2.0)/2), n);publicstaticboolspNum(long n)=> n !=0&&TestIt(i =>(long) Math.Floor(Math.Pow(Math.Sqrt(2)+ Math.Sqrt(3),8* i -4)/96), n);}
答案5:
using System;publicclassPenta{publicstaticBooleanpNum(long n){double N =(Math.Sqrt(24* n +1)+1)/6;return N ==(long)N;}publicstaticBooleangpNum(long n){double N = Math.Sqrt(24* n +1);return N ==(long)N;}publicstaticBooleanspNum(long n){if(pNum(n)){double N = Math.Sqrt(n);return N ==(long)N;}elsereturnfalse;}}
using System;publicclassPenta{publicstaticBooleanpNum(long n){return(1+ Math.Sqrt(1+24* n))/6==(int)((1+ Math.Sqrt(1+24* n))/6);}publicstaticBooleangpNum(long n){for(int i =0;; i++){if((3*i* i - i)/2== n ||(3*i* i + i)/2== n)returntrue;if((3*i* i - i)/2> n)break;}returnfalse;}publicstaticBooleanspNum(long n){returnpNum(n)&& Math.Sqrt(n)==(int)Math.Sqrt(n);}}
答案8:
using System;publicclassPenta{publicstaticBooleanpNum(long n){if(n <1)returnfalse;int i =0;while(n >0){
n = n -(i *3+1);++i;}return n ==0;}publicstaticBooleangpNum(long n){// from wikipedialong square =24*n +1;long root = Convert.ToInt64(Math.Sqrt(square));return root * root == square;}publicstaticBooleanspNum(long n){long root = Convert.ToInt64(Math.Sqrt(n));if(pNum(n)&& root * root == n)returntrue;returnfalse;}}
答案9:
using System;publicclassPenta{publicstaticlong[] dp =newlong[10000000];publicstaticBooleanpNum(long n){
dp[1]=1;long factor =1;for(int i =2; i < dp.Length; i++){
dp[i]= dp[i-1]+ factor +3;
factor +=3;}return n >0&& Array.IndexOf(dp, n)!=-1;}publicstaticBooleangpNum(long n){long factor =1;for(int i =1; i < dp.Length; i++){if(n + factor == dp[i])returntrue;
factor +=2;}return n ==0|| n ==1||pNum(n);}publicstaticBooleanspNum(long n){returnpNum(n)&& Math.Sqrt(n)%1==0;}}
答案10:
using System;publicclassPenta{publicstaticboolpNum(long n){var x =(Math.Sqrt(24*n +1)+1)/6;return x %1==0;}publicstaticboolgpNum(long n){var newN = n %2==0? n /2:-n /2;return n ==0||pNum(n)||pNum(newN);}publicstaticboolspNum(long n){returnpNum(n)&& Math.Sqrt(n)%1==0;}}