using System;using System.Linq;using System.Collections.Generic;publicclassKata{publicstaticint[]Divisors(int n){
List<int> l =newList<int>();for(int i =2; i <= Math.Sqrt(n); i++)if(n % i ==0) l.Add(i);if(l.Count ==0)returnnull;
List<int> k =newList<int>(Enumerable.Reverse(l.ToArray().Select(x => n / x).ToArray().Where(x =>!l.Contains(x))));
l.AddRange(k);return l.ToArray();}}
答案2:
using System.Linq;using System;publicclassKata{publicstaticint[]Divisors(int n){int[] divisors = Enumerable.Range(2,(int)Math.Sqrt(n)).Where(x => x < n && n % x ==0).SelectMany(x =>new[]{ x, n / x }).GroupBy(x => x).Select(g => g.First()).OrderBy(x => x).ToArray();return divisors.Length !=0? divisors :null;}}
答案3:
using System.Collections.Generic;using System.Linq.Dynamic;using System.Linq;using System;publicclassKata{publicstaticint[]Divisors(int n){
List<int> divisors =newList<int>();int max =(int)Math.Sqrt(n);for(int i =2; i <= max; i++){if(n % i ==0){
divisors.Add(i);if(i != n / i)
divisors.Add(n / i);}}if(divisors.Count()==0)returnnull;elsereturn divisors.OrderBy(x => x).ToArray();}}
答案4:
using System;using System.Collections.Generic;publicclassKata{privatestatic List<int> _result =newList<int>();privatestaticint _previousDivisor;privatestaticint _sqrt;publicstaticint[]Divisors(int n){
_previousDivisor = n;
_sqrt =(int) Math.Sqrt(n);
_result.Clear();for(int i =2; i < _previousDivisor && i <= _sqrt; i++){if(n % i ==0){
_result.Add(i);
_previousDivisor = n / i;if(i != _previousDivisor){
_result.Add(_previousDivisor);}}}if(_result.Count >0){
_result.Sort();return _result.ToArray();}elsereturnnull;}}
答案5:
using System.Collections.Generic;using System;using System.Linq;publicclassKata{publicstaticint[]Divisors(int n){constint lowerBound =1;constint firstPrimeNumber =2;if(IsOutsideTolerance(n, lowerBound))returnnull;if(n == firstPrimeNumber)returnnull;var divisors =GetDivisors(n);if(IsPrimeNumber(divisors))returnnull;
divisors.Sort();return divisors.ToArray();}privatestaticboolIsOutsideTolerance(int n,int lowerBound){return n <= lowerBound;}privatestaticboolIsPrimeNumber(List<int> divisors){return!divisors.Any();}privatestatic List<int>GetDivisors(int n){var divisors =newList<int>();var squareRouteOfNumber =(int)Math.Sqrt(n);int inverse;for(int i =2; i <= squareRouteOfNumber;++i){if(n % i ==0){
divisors.Add(i);
inverse = n / i;if(i != inverse){
divisors.Add(inverse);}}}return divisors;}}
using System;using System.Linq;using System.Collections.Generic;publicclassKata{publicstaticint[]Divisors(int n){var result =newList<int>();for(var i =2; i <= Math.Sqrt(n); i++)if(n % i ==0)
result.Add(i);if(result.Count ==0)returnnull;
result.AddRange(result.Select(x => n / x).Where(x =>!result.Contains(x)).Reverse());return result.ToArray();}}
答案8:
using System;using System.Linq;using System.Collections.Generic;publicclassKata{publicstaticint[]Divisors(int n){
List<int> sample=newList<int>(){};for(int i =2; i <= Math.Sqrt(n); i++){if(n % i ==0){
sample.Add(i);
sample.Add(n/i);}}
sample = sample.OrderBy(x=>x).ToList();return sample.Count()>0? sample.Distinct().ToArray():null;}}
答案9:
using System.Collections.Generic;using System;using System.Linq;publicclassKata{publicstaticint[]Divisors(int n){var listNumber =newList<int>();for(int i =2; i <= Math.Sqrt(n); i++)if(n % i ==0) listNumber.Add(i);if(listNumber.Count ==0)returnnull;
List<int> k =newList<int>(Enumerable.Reverse(listNumber.ToArray().Select(x => n / x).ToArray().Where(x =>!listNumber.Contains(x))));
listNumber.AddRange(k);return listNumber.ToArray();}}
答案10:
using System.Collections.Generic;using System.Linq;publicclassKata{publicstaticint[]Divisors(int n){
List<int> result =newList<int>();for(int i =2; i <= n / i; i++){if(n % i ==0){
result.Add(i);if(i != n / i){
result.Add(n / i);}}}
result.Sort();return result.Count ==0?null: result.ToArray();}}