2009-07-19 6 views
0

que je dois résoudre cette question, mais im coincé à obtenir les facteurs, mais ce que je dois faire est ...obtenir les facteurs consécutifs, C#

Un nombre positif n est consécutif factorisé si et seulement si elle a des facteurs, i et j où i> 1, j> 1 et j = i + 1. Ecrire une fonction nommée isConsecutiveFactored qui renvoie 1 si son argument est factorisé consécutivement, sinon il renvoie 0. la signature de la fonction est int isConsectiveFactored (int n)

la signature de fonction est int isConsectiveFactored (int n) Exemple

Si n est 24 retour 1 parce que 24 = 2 * 3 * 4 et 3 = 2 + 1

Si n est égal à 105 return 0 car 105 = 3 * 5 * 7 et 5! = 3 + 1 et 7! = 5 + 1

Si n est 90 retour 1 parce que les facteurs de 90 comprennent 2 et 3 et 3 = 2 + 1

jusqu'à présent ive été en mesure d'obtenir le facteur c'est-à-dire si le nombre est de 24 alors j'ai pu obtenir 2 et 12, mais im coincé là-bas et obturé ....

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

}

quelqu'un peut me aider .....

Répondre

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

Mais vous devriez vraiment faire vos devoirs vous, et je ne pouvais pas me résoudre à retourner un int.

3

Effectuez les opérations suivantes

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