Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Valuamba
3 / 3 / 4
Регистрация: 03.11.2015
Сообщений: 81
#1

Нужно найти числа которые являются произведением K различных простых множителей , k<7 - C++

04.12.2016, 17:27. Просмотров 310. Ответов 15
Метки нет (Все метки)

Помогите пожалуйста решить задачу:Нужно найти числа которые являются произведением K различных простых множителей , k<7 .Или хотя бы подскажите как упростить эту задачу,чтобы решить задачу?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.12.2016, 17:27
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Нужно найти числа которые являются произведением K различных простых множителей , k<7 (C++):

Выбираются те числа,которые являются произведением k различных простых множителей , k<7
n-натуральное число, выбираются те числа,которые являются произведением k...

Найти в массиве числа, которые являются квадратами простых
Написать программу в которой создается массив из любых чисел, а потом выводятся...

Определить количество элементов массива, которые являются произведением четного числа на нечетное
Дан неупорядоченный массив, состоящий из n натуральных чисел. Определить...

Создать функцию,формирующую массив простых множителей заданного натурального числа
Создать функцию,формирующую массив простых множителей заданного натурального...

Найти количество чисел меньших А, делящихся только на три различных простых числа
Использовать только одну функцию. Найти кол-во чисел меньших А, делящихся ...

Найти простые числа, которые можно разбить еще на два простых числа
Найти на промежутке количество простых чисел, которые можно разбить еще на два...

15
MAlorik123
2 / 2 / 0
Регистрация: 23.10.2012
Сообщений: 29
04.12.2016, 17:35 #2
строишь массив простых чисел,после чего задаешь условие
0
cordfield
44 / 44 / 19
Регистрация: 04.05.2014
Сообщений: 189
04.12.2016, 17:39 #3
Сначала нужно найти простые числа в количестве n штук. Скажем, записать их в массив.
Потом перебрать различные сочетания, выбирая по k элементов из n, причём так, чтобы выбранные элементы не повторялись.
Число сочетаний, которое можно будет получить при разных n и k вычисляется по формуле:
http://www.cyberforum.ru/cgi-bin/latex.cgi?C_n^k = \frac{n!}{k!\left(n-k\right)!}
0
Fixer_84
828 / 638 / 645
Регистрация: 30.04.2016
Сообщений: 2,115
04.12.2016, 17:49 #4
Valuamba, чтобы было понятней, привожу небольшой пример программы для строки:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <string>
#include <algorithm>
 
using namespace std;
 
int main()
{
    string s;
    cout << "Введите строку(все символы разные):" << endl;
    getline(cin, s);
    cout << "Всевозможные сочетания:" << endl;
    do
    {
    cout << s << endl;
    }
    while (next_permutation(s.begin(), s.end()));
    system("pause");
    return 0;
}
0
amaralikyr
61 / 61 / 63
Регистрация: 18.09.2015
Сообщений: 207
Завершенные тесты: 1
04.12.2016, 17:57 #5
Не понимаю смысла задачи, то есть к примеру дано число 124 и нужно найти его множители К, К<7
типа: 2 * 2 * 31...?
0
Valuamba
3 / 3 / 4
Регистрация: 03.11.2015
Сообщений: 81
04.12.2016, 18:08  [ТС] #6
дано число допустим 15 ,вводим из скольки множителей оно должно будет состоять,например: k=2, число 15 может состоять из 3*5 и 1*15,но нам нужны простые множители,а так как 1 не является простым числом,тогда верное равенство 3*5.И нужно найти такие числа, которые состоят из заданного кол-ва простых множителей
0
Fixer_84
828 / 638 / 645
Регистрация: 30.04.2016
Сообщений: 2,115
04.12.2016, 18:16 #7
Valuamba, давайте, для начала, получим простые сомножители. Я напишу программу и если все хорошо, мы продолжим строить решение. Хорошо?
0
Valuamba
3 / 3 / 4
Регистрация: 03.11.2015
Сообщений: 81
04.12.2016, 18:28  [ТС] #8
Да,вот я написал программу,которая находит простые множители:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
int main()
{
   setlocale(LC_ALL,"Russian");
   int chisl,n;
 
const int k=10000;
int A[k];
int C[k];
int chs=0;
 for(int i=1;i<k;i++)
 {
     int ch=0;
 
     for(int z=2;z<=i;z++)
      if(i % z==0)
        ch++;
      if(ch==1)
        {
            if(i<=1000)
               {
           chs++;
        C[chs]=i;
               }
        }
 
 }
for(int j=1;j<chs;j++)
 cout<<"простые числа: "<<C[j]<<endl;
   _getch();
   return 0;
}
И,пожаолуйста,если собираетесь написать код,напишите просто,без функций,классов и т.д,с и спользованием циклов и массивов
0
Fixer_84
828 / 638 / 645
Регистрация: 30.04.2016
Сообщений: 2,115
04.12.2016, 18:32 #9
Valuamba, пока мысли такие. Прокомментируйте это, пожалуйста.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
#include <cmath>
 
bool IsPrime(int N)
{ 
for (int i = 2; i <= sqrt(N); i++)
if (N % i == 0) return false;
if (N == 1) return false;
return true;
}
 
using namespace std;
 
int main()
{
    int N;
    cin >> N;
    for (int i = 1; i <= N; i++)
    {
    if ((IsPrime(i)) && (N % i == 0))
    cout << i << " ";
    }
    cout << endl;
    system("pause");
    return 0;
}
Добавлено через 3 минуты
Valuamba, вывод такой: не каждое число можно представить в виде произведения k различных простых сомножителей. Например, для числа 20 моя программа выдаст только числа 2 и 5...
0
Valuamba
3 / 3 / 4
Регистрация: 03.11.2015
Сообщений: 81
04.12.2016, 18:34  [ТС] #10
Уффффф функции,я пока их еще не вспомнил их.У меня проблема как перебирать множители от 1 до 7 как сделать такой цикл,я вчера пробовал эксперементировать с степенями там вроде все просто.
Цитата Сообщение от Valuamba Посмотреть сообщение
И,пожаолуйста,если собираетесь написать код,напишите просто,без функций,классов и т.д,с и спользованием циклов и массивов
0
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
4385 / 2360 / 655
Регистрация: 18.10.2014
Сообщений: 4,002
04.12.2016, 19:09 #11
Цитата Сообщение от Valuamba Посмотреть сообщение
найти числа которые являются произведением K различных простых множителей , k<7
Какая-то белиберда. Чисел, являющихся произведением K различных простых множителей, бесконечено много. Что значит "найти числа"?
0
Valuamba
3 / 3 / 4
Регистрация: 03.11.2015
Сообщений: 81
04.12.2016, 19:49  [ТС] #12
Например:
1.введите число:105
2.введите количество множителей:3
Вывод:число 105 подходит(5*3*7)
Можно самому вводить число,а можно искать их на промежутке каком—то.Мне самое главное это узнать алгоритм как перебирать множители
0
Fixer_84
828 / 638 / 645
Регистрация: 30.04.2016
Сообщений: 2,115
04.12.2016, 21:03 #13
Лучший ответ Сообщение было отмечено Valuamba как решение

Решение

Valuamba, может быть, это то, что вам нужно:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <iostream>
#include <cmath>
#include <vector>
 
bool IsPrime(int N)
{
    for (int i = 2; i <= sqrt(N); i++)
        if (N % i == 0)
            return false;
    if (N == 1)
        return false;
    return true;
}
 
using namespace std;
 
int main()
{
    int N, p;
    vector<int> x;
    cout << "Введите число:" << endl;
    cin >> N;
    cout << "Введите количество множителей:" << endl;
    cin >> p;
    for (int i = 1; i <= N; i++)
    {
        if ((IsPrime(i)) && (N % i == 0))
            x.push_back(i);
    }
    if (p == x.size())
    {
        cout << "Для данного числа найдены множители!" << endl;
        for (int i = 0; i < p; i++)
        {
            cout << x[i] << " ";
        }
    }
    else cout << "Это число не разложить на заданное количество множителей!" << endl;
    system("pause");
    return 0;
}
Добавлено через 1 минуту
Valuamba, предполагается, что множители являются простыми числами и различны.
1
Valuamba
3 / 3 / 4
Регистрация: 03.11.2015
Сообщений: 81
04.12.2016, 21:25  [ТС] #14
Цитата Сообщение от Fixer_84 Посмотреть сообщение
bool IsPrime(int N)
{
* * for (int i = 2; i <= sqrt(N); i++)
* * * * if (N % i == 0)
* * * * * * return false;
* * if (N == 1)
* * * * return false;
* * return true;
}
Скажите пожалуйста что делает эта функция?

Добавлено через 40 секунд
Цитата Сообщение от Fixer_84 Посмотреть сообщение
x.push_back(i);
и вот эта строка?
Спастбо,ваша программа делает все то что я и хотел,но можно это сделать буз функций при помощи циклов и массивов,или мне пока рановато решать такие задачи?
0
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
4385 / 2360 / 655
Регистрация: 18.10.2014
Сообщений: 4,002
04.12.2016, 21:33 #15
Цитата Сообщение от Valuamba Посмотреть сообщение
Можно самому вводить число,а можно искать их на промежутке каком—то.Мне самое главное это узнать алгоритм как перебирать множители
Задача уже решалась здесь

http://www.cyberforum.ru/cpp-beginners/thread1306371.html#post6882947
1
Fixer_84
828 / 638 / 645
Регистрация: 30.04.2016
Сообщений: 2,115
04.12.2016, 21:50 #16
Valuamba, x.push_back(i) помещает различные простые множители в вектор. Затем мы проверяем, равна ли длина вектора задаваемому количеству множителей. Если да, то можно разложить, если нет, то нельзя. Можно убрать функцию, но это менее удобно и медленней.
0
04.12.2016, 21:50
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.12.2016, 21:50
Привет! Вот еще темы с решениями:

Найти числа, которые являются квадратами некоторого другого числа
Помогите написать программу на С++ Вот условие: Даны целые положительные...

Найти в последовательности числа, которые являются квадратом числа m
Даны целые положительные числа . Найти среди них те, которые являются...

Даны целые положительные числа аь а2,., а„. Найти среди них те, которые являются квадратами некоторого числа т
Упорядочить по возрастанию элементы каждой строки мат рицы размером пхт. ...

нужно написать программу, находящую количество чисел меньших x, которые делятся в точности на три простых числа.
Мне нужно написать программу, находящую количество чисел меньших x, которые...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru