C# Implementação de métodos de extensão para o tipo de dados biginteger. Como extrair uma enésima raiz, gerando um valor e exponenciação aleatórios. Por Nikolai Thesquid.
Ficarei feliz em mesclar suas solicitações de tração para melhorar o desempenho do cálculo. Mesmo que a melhoria afete apenas casos individuais a partir da faixa de valores.
Para usar essas extensões, você precisará adicionar ao seu código a seguir os espaços de nome: System.Numerics e TheSquid.Numerics.Extensions .
C# Implementação de um método de extensão para calcular rapidamente uma enésima raiz (incluindo raiz quadrada) pelo valor de Biginteger.
Basicamente, você pode copiar a classe NTHrootextension do repositório de origem para o seu projeto. Outra opção é adicionar o pacote thesquid.numerics.extensions do Repositório Nuget às dependências do seu projeto.
Exemplo de uso:
var source = BigInteger . Parse ( Console . ReadLine ( ) ) ;
var exponent = int . Parse ( Console . ReadLine ( ) ) ;
var root = source . NthRoot ( exponent , out var isExactResult ) ;Você pode iniciar testes aleatórios de NTHROOT logo após o repositório do clone e criar solução. Você deve executar gera testes e reconstruir a solução antes de iniciar a velocidade Nth Raiad Tests.
O método de extensão usa dois algoritmos de cálculo raiz: o método de Newton conhecido e o método de digit-by-digit. À medida que o grau da raiz aumenta, o cálculo pelo método de Newton diminui e o método dígito por dígito acelera. Com uma ordem de valor radicante radicante de 100.000 dígitos decimais, a dependência da velocidade de cálculo no grau da raiz é a seguinte:

C# Implementação de um método de extensão para gerar valor aleatório de biginteger dentro do intervalo especificado.
Basicamente, você pode copiar a classe NextBigIntegerextension do repositório de origem para o seu projeto. Outra opção é adicionar o pacote thesquid.numerics.extensions do Repositório Nuget às dependências do seu projeto.
Exemplo de uso:
var min = BigInteger . Parse ( Console . ReadLine ( ) ) ;
var max = BigInteger . Parse ( Console . ReadLine ( ) ) ;
var random = new Random ( DateTime . Now . Millisecond ) . NextBigInteger ( min , max ) ;Você pode iniciar testes aleatórios para o método de extensão NextBigInteger usando a classe NextBigIntegerextensionTests do projeto thesquid.numerics.extensions.tests logo após o repositório do clone e a solução de construção.
Método de extensão para a classe do sistema aleatória. O método usa a instância da classe aleatória para gerar uma matriz de bytes aleatórios.
C# Implementação de um método de extensão para um cálculo mais rápido de poderes com parâmetros repetidos usando o cache.
Basicamente, você pode copiar a classe Powcachedextension do repositório de origem para o seu projeto. Outra opção é adicionar o pacote thesquid.numerics.extensions do Repositório Nuget às dependências do seu projeto.
Exemplo de uso:
var source = BigInteger . Parse ( Console . ReadLine ( ) ) ;
var exponent = int . Parse ( Console . ReadLine ( ) ) ;
var power = source . PowCached ( exponent ) ; O Pow Cache se limpa automaticamente. Em primeiro lugar, se ocorrer um erro fora da memória ao calcular a potência. Em seguida, o cache será completamente limpo. Em segundo lugar, se o número de elementos no cache atingir o número de int.MaxValue . Em seguida, o cache será limpo pela metade. Além disso, você pode verificar o número de elementos no cache e limpá -lo manualmente, deixando um número especificado de elementos.
Exemplo de uso:
var available = PowCachedExtension . ItemsInCache ;
var threshold = long . Parse ( Console . ReadLine ( ) ) ;
if ( threshold < available ) PowCachedExtension . ShrinkCacheData ( threshold ) ;Você pode iniciar testes aleatórios para o método de extensão em powcached usando a classe PowCachedextensionTests do projeto thesquid.numerics.extensions.tests logo após o repositório do clone e a solução de construção.
A aceleração é alcançada memorizando os resultados dos graus de computação, bem como memorizando os resultados intermediários obtidos no progresso do cálculo. Com os valores aleatórios do porão na faixa de 0 a 1000, os valores aleatórios do expoente variam de 0 a 1000 e as iterações contam até 2000000, a dependência da velocidade de cálculo no enchimento do cache é a seguinte:
