2009-07-19 29 views
0

,我需要解決這個問題,但即時通訊卡在得到的因素,但我需要做的是...得到連續的因素,C#

正數,n是連續-因素當且僅當它具有因子i和j,其中i> 1,j> 1並且j = i + 1。編寫名爲isConsecutiveFactored的函數,如果函數的參數是連續因式分解的,則返回1,否則返回0. 函數簽名爲 int isConsectiveFactored (int n)

函數簽名是 int isConsectiveFactored(int n) 示例

如果n爲24返回1,因爲24 = 2 * 3 * 4和3 = 2 + 1

如果n是105返回0,因爲105 = 3 * 5 * 7和5!= 3 + 1和7!= 5 + 1

如果n爲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; 
    } 
} 

}

任何人可以幫助我解決這個.....

回答

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; 
       } 
      } 
     } 
    } 

但你應該做的功課你自己,我不能讓自己迴歸一個整數。

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); 
}