C#기능을 동의 정수 n 고 가장 낮은 번호를 반환할 수 있는 분할 숫자 1..n

0

질문

내가 필요로 함수를 작성하는 인수로 수 n 및 반환(문자열로)가장 낮은 가능한 번호를 나눌 수 있습니다으로 모든 숫자 1n. 예를 들어 당 n=4 그런 다음 기능을 반환 12 로 12/4 12/3 12/2 12/1 은 전체의 숫자입니다.

내가 기록하는 기능이는 작동 할 때 번호는 보다 적은 19..위 19 컴퓨터 시간은 점점 더 이상. 할 수 있는 누군가가 나에게 힌트를 줄을 더 나은 방법에 대한 메커니즘이 할 수있는 기능이 더 빠르

 public static string Smallest(int n)
        {
           
            int good = 0;//will hold number of times we got divide with no remianders
            int num = n;//smallest possible number is n
            while (true)
            {
                good = 0;
                for (int i=n; i>=1; i--)
                {
                    if (num % i ==0) good++;//meaning we got zero remainder for the divide
                    if (good == n) return num.ToString();//num of times we got zero remainders == n.

                }
                num++;
            }

        }


algorithm c# math
2021-11-23 18:05:46
3

최고의 응답

1

당신이 거대한 숫자를 위한 큰 n그 이유는,사용하자 BigInteger 에 대한 내부에 의존하고 있습니다. 으로 당신이 당신들을 넣어 우리는 해야 컴퓨팅 LCM는 같이 얻을 수 있습니다

 LCM(a, b) = a * b / GCD(a, b)

는 CGD 는 공통 분모

코드:

using System.Numerics;

...

public static string Smallest(int n) {
  if (n < 1)
    throw new ArgumentOutOfRangeException(nameofn()); 

  BigInteger result = 1;

  for (int i = 1; i <= n; ++i) 
    result = result * i / BigInteger.GreatestCommonDivisor(result, i);

  return result.ToString();
}

Demo:

  using System.Linq;
  using System.Numerics;

  ...

  var demos = string.Join(Environment.NewLine, Enumerable
    .Range(1, 20)
    .Select(n => $"{n,2} : {Smallest(n),20}"));

  Console.WriteLine(demos);
  Console.WriteLine();
  Console.WriteLine(Smallest(100));

결과:

 1 :                    1
 2 :                    2
 3 :                    6
 4 :                   12
 5 :                   60
 6 :                   60
 7 :                  420
 8 :                  840
 9 :                 2520
10 :                 2520
11 :                27720
12 :                27720
13 :               360360
14 :               360360
15 :               360360
16 :               720720
17 :             12252240
18 :             12252240
19 :            232792560
20 :            232792560

69720375229712477164533808935312303556800
2021-11-23 18:37:03
1

나의 논리:

  1. 우리는 수-그것은 최소한의 번호를 반환 될 수 있습니다
  2. -1-할 수 없는 경우에는 분이 없는 알림을 추가하는 n n 초기

하는 것을 잊지 마 업데이트 번호는 초기 때 2 단계에 알림

이렇게 얻을 때까지 올바른 값

2021-11-23 18:29:42
1

를 찾을 필요 LCM(가장 낮은 일반적인 여러)의에서 모든 숫자 1 to n.

여기에는 좋은 예를 찾을 수 있 LCM 의 배열 요소입니다. https://www.geeksforgeeks.org/lcm-of-given-array-elements/

을 만들 수 있습 배열의 모든 숫자 1n 고 그것을 전달하여 이 기능이 있습니다.

당신은 그것을 수정할 수 있습만을 전달할 n 고 효율적으로 만들기 위해 사용할 경우입니다.

2021-11-23 18:22:57

다른 언어로

이 페이지는 다른 언어로되어 있습니다

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................