プログラミング
 Computer >> コンピューター >  >> プログラミング >> プログラミング

醜い数字


醜い数は、素因数が2、3、または5である数です。1から15まで、11の醜い数1、2、3、4、5、6、8があります。 9、10、12、15。7、11、13の数字は素数であるため、醜いものではありません。素因数で7が来るので、14という数字は醜いものではありません。

このプログラムでは、n番目の醜い番号を見つけようとします。

入力と出力

Input:
Take the term number. Say it is 10
Output:
The 10th ugly number is 12

アルゴリズム

getUglyNumbers(n)

入力: 用語の数。

出力: n番目の醜い数字を見つけます。

Begin
   define array named uglyNum of size n
   i2 := 0, i3 := 0, i5 := 0
   next2mul := 2, next3mul := 3, next5Mul := 5
   next := 1
   ugluNum[0] := 1

   for i := 1 to n, do
      next := minimum of next2Mul, next3Mul and next5Mul
      uglyNum[i] := next
      if next = next2Mul, then
         i2 := i2 + 1
         next2mul := uglyNum[i2] * 2
      if next = next3Mul, then
         i3 := i3 + 1
         next3mul := uglyNum[i3] * 3
      if next = next5Mul, then
         i5 := i5 + 1
         next5mul := uglyNum[i5] * 5
   done
   return next
End
# include<iostream>
using namespace std;

int min(int x, int y, int z) {            //find smallest among three numbers
   if(x < y) {
      if(x < z)
         return x;
      else
         return z;
   }else {
      if(y < z)
         return y;
      else
         return z;
   }
}

int getUglyNum(int n) {
   int uglyNum[n];          // To store ugly numbers
   int i2 = 0, i3 = 0, i5 = 0;

   //find next multiple as 1*2, 1*3, 1*5

   int next2mul = 2;
   int next3mul = 3;
   int next5mul = 5;
   int next = 1;              //initially the ugly number is 1

   uglyNum[0] = 1;

   for (int i=1; i<n; i++) {
      next = min(next2mul, next3mul, next5mul);       //find next ugly number
      uglyNum[i] = next;

      if (next == next2mul) {
         i2++;             //increase iterator of ugly numbers whose factor is 2
         next2mul = uglyNum[i2]*2;
      }

      if (next == next3mul) {
         i3++;             //increase iterator of ugly numbers whose factor is 3
         next3mul = uglyNum[i3]*3;
      }

      if (next == next5mul) {
         i5++;              //increase iterator of ugly numbers whose factor is 5
         next5mul = uglyNum[i5]*5;
      }
   }
   return next;        //the nth ugly number
}

int main() {
   int n;
   cout << "Enter term: "; cin >> n;
   cout << n << "th Ugly number is: " << getUglyNum(n) << endl;
}

出力

Enter term: 10
10th Ugly number is: 12

  1. Javaでの数値配列のLCM

    L.C.M.または2つの値の最小公倍数は、両方の値の倍数である最小の正の値です。 たとえば、3と4の倍数は次のとおりです。 3→3、6、9、12、15 ... 4→4、8、12、16、20 ... 両方の最小公倍数は12であるため、3と4のLCMは12です。 プログラム 次の例では、数値の配列のLCMを計算します。 public class LCMofArrayOfNumbers {    public static void main(String args[]) {       int[] myArray = {25, 50,

  2. JavaScript番号の例

    以下はJavaScriptの数字の例です- 例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Document</title> <style>    body