0

私はこの質問を解決する必要がありますが、要因を取得することに固執していますが、私がする必要があるのは...

正の数nは、因数分解があり、iとjがあり、i> 1、j> 1、j = i + 1の場合にのみ、連続因数分解されます。引数が連続因数分解された場合に1を返すisConsecutiveFactoredという名前の関数を記述します。それ以外の場合は0を返します。関数の署名はintisConsectiveFactored(int n)です。

関数のシグネチャはintです。isConsectiveFactored(int n)

nが24の場合、24 = 2 * 3*4および3=2 + 1であるため、1を返します。

nが105の場合、105 = 3 * 5 * 7および5!= 3 + 1および7!= 5 + 1であるため、0を返します。

nが90の場合、90の因数には2と3が含まれ、3 = 2 + 1であるため、1を返します。

これまでのところ、iveは係数を取得できました。つまり、数値が24の場合、iveは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;
    }
}

}

誰かがこれで私を助けることができます.....

4

2 に答える 2

3

以下を試してください

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);
}
于 2009-07-19T05:42:27.060 に答える
0
    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 を返すことはできませんでした。

于 2009-07-19T04:53:57.173 に答える