получить последовательные факторы, c # - PullRequest
0 голосов
/ 19 июля 2009

Мне нужно решить этот вопрос, но я застрял в получении факторов, но что мне нужно сделать, это ...

Положительное число п последовательно-учитываться, если и только если оно имеет факторы, я и J, где я> 1, J> 1 и у = + 1. Написать функцию с именем isConsecutiveFactored, которая возвращает 1, если ее аргумент подряд -факторировано, в противном случае возвращается 0. подпись функции int isConsectiveFactored (int n)

подпись функции int isConsectiveFactored (int n) Пример

Если п 24 возврата 1, так как 24 = 2 * 3 * 4 и 3 = 2 + 1

Если n равно 105, вернуть 0, потому что 105 = 3 * 5 * 7 и 5! = 3 + 1 и 7! = 5 + 1

* +1017 * Если п 90 возврата 1, поскольку факторы включают в себя 90 2 и 3 и 3 = 2 + 1

до сих пор я был в состоянии получить коэффициент, т.е. если число 24, то я смог получить 2 и 12, но я застрял там и заглушил ....

 using System;
  using System.Collections.Generic;
  using System.Text;

 namespace isConsecutiveFactored
{
class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine(isConsecutiveFactored(24));
    }

    private static int isConsecutiveFactored(int p)
    {


        foreach (int a1 in getFactor(24))
        {
            Console.WriteLine(a1);
        }



        return 0;

    }

    private static List<int> getFactor(int p)
    {
        List<int> factor = new List<int>();
        int max = (int)Math.Sqrt(p);
        for (int i = 1; i <= max; i++)
        {
            if (i != 0)
            {
                if ((p % i) == 0)
                {

                    if (i != max)
                    {
                        if ((p / i) != 1 && (p / i) != p)
                        {
                            factor.Add(i);
                            factor.Add(p / i);
                            //Console.WriteLine((p / i) + "  " + "this is the factor");
                        }
                    }

                }
            }

            //
        }
        List<int> fac = factor.GetRange(0, 2);


        return fac;
    }
}

}

Кто-нибудь может мне помочь с этим .....

Ответы [ 2 ]

3 голосов
/ 19 июля 2009

Попробуйте следующее

public static bool IsConsequtiveFactor(int number) {
  var factors = GetFactors(number);
  int? last = null;
  foreach ( var cur in factors ) {
    if ( last.HasValue && last.Value == cur - 1 ) {
      return true;
    }
    last = cur;
  }  
}

public static IEnumerable<int> GetFactors(int number) {
  int max = (int)Math.Sqrt(number);
  return Enumerable
    .Range(2,max-2)
    .Where(x => 0 == number % x);
}
0 голосов
/ 19 июля 2009
    public static bool IsConsecutiveFactored(int number)
    {
        var ints = Factor(number);
        return (from i in ints join s in ints on i equals s + 1 
                where i > 1 && s > 1
                select i).Count() > 0;
    }

    public static IEnumerable<int> Factor(int number)
    {
        int max = (int)Math.Sqrt(number);  //round down
        for (int factor = 1; factor <= max; ++factor)
        { //test from 1 to the square root, or the int below it, inclusive.
            if (number % factor == 0)
            {
                yield return factor;
                if (factor != max)
                { // Don't add the square root twice!  Thanks Jon
                    yield return number / factor;
                }
            }
        }
    }

Но вы действительно должны сделать свою домашнюю работу самостоятельно, и я не мог заставить себя вернуть int.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...