Как мне преобразовать эту строку Python в C ++?

0

Извините, если это немного простой вопрос, но я действительно пытаюсь преобразовать эту последнюю строку кода из программы Python в C++

строка кода:

if all(x % k == 0 for k in range(1, 21))

В основном это означает, что X равномерно делится на все числа 1-20.

Кто-нибудь знает, как я могу это преобразовать?

Изменение: некоторый контекст программы:

    x = 0
    while(x != -1):
        x = x + 20
        if all(x % k == 0 for k in range(1, 21)):
            print(x)
            return 0
  • 0
    Какие-то попытки ??
  • 0
    Возможный дубликат: stackoverflow.com/questions/3559845/…
Показать ещё 2 комментария
Теги:

3 ответа

1
Лучший ответ

Что-то вроде этого возможно:

#include <algorithm>
#include <numeric>
#include <vector>
#include <iostream>

int main()
{
    int x = 10; // or whatever...

    // create vector of 20 ints
    std::vector<int> range(20);
    // fill vector with increasing numbers, starting at 1
    std::iota(range.begin(), range.end(), 1);

    // do the testing
    bool result = std::all_of(range.begin(), range.end(), [x] (int k) { return x % k == 0; });

    std::cout << result << std::endl;
}
  • 0
    Это ближе к тому, что Python действительно делает под капотом, но довольно неэффективно.
  • 0
    Та же ошибка, что и ниже. Я думаю ... 21 следует исключить.
Показать ещё 3 комментария
3

Один простой способ - реализовать свой собственный цикл:

bool test_something(int x)
{
  for (int i = 1; i < 21; ++i)
  {
    if (x % i != 0) return false;
  }
  return true;
}
0
#include<iostream>
using namespace std;

bool test_div(long num){
  for(int i = 1; i <= 20; i++){   
     if(num % i != 0){
        return false;
      }
  }
  return true;
}

int main(){
    int count = 0;
    long number = 0;
    while(1){
        number+=1;
        if (test_div(number)){
            count+=1;
            cout << "Find " << count << "th match number: " << number << endl;
            if(count == 10)
                break;
        }

    }
}

Вывод:

Find 1th match number: 232792560
Find 2th match number: 465585120
Find 3th match number: 698377680
Find 4th match number: 931170240
Find 5th match number: 1163962800
Find 6th match number: 1396755360
Find 7th match number: 1629547920
Find 8th match number: 1862340480
Find 9th match number: 2095133040
Find 10th match number: 2327925600

Проверьте с помощью python:

In [1]: x = 2327925600
In [2]: all(x % k == 0 for k in range(1, 21))
Out[3]: True

Ещё вопросы

Сообщество Overcoder
Наверх
Меню