Наименьшее число, которое равномерно делится на все числа от 1 до 20? - PullRequest
8 голосов
/ 24 января 2010

Я сделал эту проблему [ Project Euler, проблема 5 ], но очень плохой способ программирования, см. Код на c ++,

#include<iostream>
using namespace std;
// to find lowest divisble number till 20

int main()
{
int num = 20, flag = 0;

while(flag == 0)
{
    if ((num%2) == 0 && (num%3) == 0 && (num%4) == 0    && (num%5) == 0 && (num%6) == 0 
    && (num%7) == 0 && (num%8) == 0 && (num%9) == 0 && (num%10) == 0 && (num%11) == 0 && (num%12) ==0   
    && (num%13) == 0 && (num%14) == 0 && (num%15) == 0 && (num%16) == 0 && (num%17) == 0 && (num%18)==0
    && (num%19) == 0    && (num%20) == 0)       

    {
        flag =  1;
        cout<< " lowest divisible number upto 20 is  "<< num<<endl;
    }

    num++;
}

}

Я решал это в C ++ и застрял в цикле, как бы решить этот шаг ......

  • рассмотрим число = 20 и разделим его на числа от 1 до 20
  • проверить, все ли остатки равны нулю,
  • Если да, выйдите и покажите номер выхода
  • или иначе num ++

Я не знаю, как использовать управляющие структуры, поэтому сделал этот шаг

if ((num%2) == 0 && (num%3) == 0 && (num%4) == 0    && (num%5) == 0 && (num%6) == 0 
&& (num%7) == 0 && (num%8) == 0 && (num%9) == 0 && (num%10) == 0 && (num%11) == 0 && (num%12) ==0   
&& (num%13) == 0 && (num%14) == 0 && (num%15) == 0 && (num%16) == 0 && (num%17) == 0 && (num%18)==0
&& (num%19) == 0    && (num%20) == 0) `

как правильно это закодировать?

ответ на эту проблему:

abhilash@abhilash:~$ ./a.out 
 lowest divisible number upto 20 is  232792560

Ответы [ 12 ]

0 голосов
/ 24 января 2010

Это может помочь вам http://www.mathwarehouse.com/arithmetic/numbers/prime-number/prime-factorization.php?number=232792560

Первичная факторизация 232 792 560

2 ^ 4 • 3 ^ 2 • 5 • 7 • 11 • 13 • 17 • 19

0 голосов
/ 24 января 2010

Учитывая максимальное n, вы хотите вернуть наименьшее число, которое делится на 1 - 20.

Давайте посмотрим на набор от 1 до 20. Прежде всего, он содержит ряд простых чисел, а именно:

2
3
5
7 
11
13
17
19

Итак, поскольку он должен делиться на 19, вы можете проверить только кратные 19, потому что 19 - это простое число. После этого вы проверяете, можно ли его разделить на тот, что ниже, и т. Д. Если число можно успешно разделить на все простые числа, его можно разделить на числа от 1 до 20.

float primenumbers[] = { 19, 17, 13, 11, 7, 5, 3, 2; };

float num = 20;

while (1)
{
   bool dividable = true;
   for (int i = 0; i < 8; i++)
   {
      if (num % primenumbers[i] != 0)
      {
         dividable = false;
         break;
      }
   }

   if (dividable) { break; }
   num += 1;
}

std::cout << "The smallest number dividable by 1 through 20 is " << num << std::endl;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...