using System;using System.Collections.Generic;using System.Text;using System.Numerics;publicclassJomoPipi{privatestatic List<BigInteger> _numbers =newList<BigInteger>{0,1,9,3025};staticJomoPipi(){for(int i =4; i <=18; i++){BigInteger sqri = i * i;for(int j =1; j < i; j++){
sqri -= _numbers[j];
sqri *= sqri;}
_numbers.Add(sqri);}}publicstaticBigIntegerpipi(int n){return _numbers[n];}}
答案2:
using System;using System.Collections.Generic;using System.Text;using System.Numerics;publicclassJomoPipi{privatestatic Dictionary<int,BigInteger> cache =newDictionary<int,BigInteger>();publicstaticBigIntegerpipi(int n){if(cache.ContainsKey(n)){return cache[n];}var b =newBigInteger(n);for(var i=1;i<n;i++){
b *= b;
b -=pipi(i);}var result = b * b;
cache.Add(n, result);return result;}}
答案3:
using System.Collections.Concurrent;using System.Numerics;publicclassJomoPipi{privatestatic ConcurrentDictionary<int, BigInteger> _lookup =newConcurrentDictionary<int,BigInteger>();publicstaticBigIntegerpipi(int n){BigInteger result;if(_lookup.TryGetValue(n,out result)){return result;}
result = n;for(int i =1; i < n; i++){
result =(result * result)-pipi(i);}
result = result * result;
_lookup.TryAdd(n, result);return result;}}
答案4:
using System;using System.Text;using System.Numerics;using System.Collections.Generic;publicclassJomoPipi{publicstatic Dictionary<int, BigInteger> pipiN =newDictionary<int,BigInteger>(){{0,0}};publicstaticBigIntegerpipi(int n){BigInteger p;if(!pipiN.TryGetValue(n,out p)){if(n ==0)returnnewBigInteger(0);
p =newBigInteger(n);for(int i =0; i < n; i++){
p -=pipi(i);
p *= p;}
pipiN[n]= p;}return p;}}
答案5:
using System.Numerics;using System.Collections.Generic;publicclassJomoPipi{privatestatic Dictionary<int, BigInteger> pipiNumberDict =newDictionary<int, BigInteger>{{0,0}};publicstaticBigIntegerpipi(int n){BigInteger p;if(!pipiNumberDict.TryGetValue(n,out p)){
p =newBigInteger(n);for(int i =0; i < n; i++){
p -=pipi(i);
p *= p;}
pipiNumberDict[n]= p;}return p;}}
答案6:
using System.Numerics;using System.Collections.Generic;publicclassJomoPipi{privatestatic Dictionary<int, BigInteger> pipiNumberDict =newDictionary<int, BigInteger>{{0,0}};publicstaticBigIntegerpipi(int n){BigInteger p;if(!pipiNumberDict.TryGetValue(n,out p)){if(n ==0)returnnewBigInteger(0);
p =newBigInteger(n);for(int i =0; i < n; i++){
p -=pipi(i);
p *= p;}
pipiNumberDict[n]= p;}return p;}}
答案7:
using System.Collections.Generic;using System.Numerics;publicclassJomoPipi{publicstaticBigIntegerpipi(int n ){returnGetNumber( n );}privatestaticreadonly Dictionary<int, BigInteger> Pipi =newDictionary<int, BigInteger>{{0,0},{1,1},{2,9}};privatestaticBigIntegerGetNumber(int n ){if(!Pipi.ContainsKey( n )){BigInteger t =Square(Square( n )-GetNumber(1));for(int i =2; i < n; i++){
t =Square( t -GetNumber( i ));}
Pipi [ n ]= t;}return Pipi [ n ];}privatestaticBigIntegerSquare(BigInteger n ){return BigInteger.Pow( n,2);}}
答案8:
using System.Collections.Generic;using System.Numerics;publicclassJomoPipi{privatestatic List<BigInteger> lookup =newList<BigInteger>(){0};publicstaticBigIntegerpipi(int n){if(lookup.Count > n)return lookup[n];BigInteger p = n;for(var j =1; j <= n;++j){
p -=pipi(j -1);
p *= p;}
lookup.Add(p);// safe because algorithm always requests these in increasing orderreturn p;}}
答案9:
using System;using System.Numerics;publicclassJomoPipi{publicstaticBigIntegerpipi(int n){return ps[n];}staticreadonly BigInteger[] ps =newBigInteger[19];staticJomoPipi(){for(int i =0; i < ps.Length; i++){BigInteger p = i;for(int j =0; j < i; j++)
p = BigInteger.Pow(p - ps[j],2);
ps[i]= p;}}}