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

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

16.12.2016, 16:39. Просмотров 193. Ответов 6
Метки нет (Все метки)

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

http://www.cyberforum.ru/cpp-beginners/thread1868091.html
Вот моя версия кода к этой задаче,только числа вида 36=2*2*3*3 программа не находит(допустим k=4)
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
int main()
{
    setlocale(LC_ALL,"Russian");
    const long int sum=10000;
    int vs=1;
    int n,c,ck;
    int A[sum];
    int V[sum];
    int kolv,k;
    int val=0;
    cout<<"Введите количество первых множителей: ";cin>>kolv;
    cout<<"Введите кол-во простых множителей: ";cin>>k;
  for(int n=1;n<=sum;n++)//ввод числа
  {
      ck=0;//начальное кол-во делителей
 
   for(int i=2;i<=n;i++)//поиск делителя
   {
     c=0;
 
    if(n%i==0)//условие делителя
     {
         for(int j=1;j<=i;j++)//проверка на простоту делителя
          if(i%j==0)//условие простоты
           c++;//сколько делителей
      if(c==2 && i<=1000)//еще одно условие
      {
          ck++;//кол-во делителей,прошедших проверку
          A[ck]=i;//массив простых делителей числа n
      }
     }
   }
            /*if(ck>=2)//кол-во простотых делителей ДЛЯ ПРОВЕРКИ!!
                {
                    cout<<"Введите число n: "<<n<<endl;
                    for(int j=1;j<=ck;j++)
                    cout<<"\t\t\t\tA["<<j<<"]="<<A[j]<<endl;//вывод с табуляцией
            }*/
        int rk=0;
        int kp;
        int p;
 
       for(int rk=1;rk<=ck-1;rk++)//перебираем множители
        {
         int sv=1;//для стеепени
         p=0;//кол-во множителей
          while(p<+k)//пока меньше числа
            {
                p++;
                sv=sv*A[rk];//степень множителя
                if(n==sv*A[rk+1])//условие при котором цикл остановится
                  {
                      p++;
                      if(k==p)
                    kp=sv*A[rk+1];
                  break;
                  }
 
            }
        }
 
   int vs=1;
  for(int i=1;i<=k;i++)//проверка множителей
    vs=vs*A[i];
  if(vs==n || kp==n)//загоняем в массив еужные нам числа
    {
 
      val++;//для вывода первых kolv чисел
      V[val]=n;//для вывода первых kolv чисел
 
        /*cout<<"V["<<val<<"]="<<V[val]<<endl;//ДЛЯ ПРОВЕРКИ!
             for(int j=1;j<=ck;j++)
                cout<<"\t\t\t\tA["<<j<<"]="<<A[j]<<endl;//вывод с табуляцией*/
    }
}
for(int l=1;l<=kolv;l++)//вывод
    cout<<"V["<<l<<"]="<<V[l]<<endl;
 
    _getch();
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.12.2016, 16:39
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Выбираются те числа,которые являются произведением k различных простых множителей , k<7 (C++):

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

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

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

Подсчитать количество различных символов, которые не являются буквами или цифрами, и вывести их на экран
Задание: Дана строка. Подсчитать количество различных символов, которые не...

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

6
Байт
Эксперт C
17756 / 11781 / 2448
Регистрация: 24.12.2010
Сообщений: 23,681
16.12.2016, 17:00 #2
Цитата Сообщение от Valuamba Посмотреть сообщение
числа вида 36=2*2*3*3 программа не находит
А зачем их находить?
Цитата Сообщение от Valuamba Посмотреть сообщение
произведением k различных простых множителей
0
Valuamba
3 / 3 / 4
Регистрация: 03.11.2015
Сообщений: 81
16.12.2016, 20:21  [ТС] #3
Смотри у 36-2 простых множителя-это 2 и 3,если я введу k=4(число должно состоять из 4 простых множителей),то моя программа не выведет это число,хотя должна потому что 36=2*2*3*3.По идее,у числа 36 2 простых множителя поэтому оно не подходит,но надо еще учитывать возведение этих простых множителей в степень и возведенные встепень множите на другие множители например у 45-5 и 3,5*3!=45,однако,5*3*3=45,или же 5*5*2*2=100.Так получается,что я пока еще не придумал как написать такую программу.
0
Байт
Эксперт C
17756 / 11781 / 2448
Регистрация: 24.12.2010
Сообщений: 23,681
16.12.2016, 20:28 #4
Valuamba, ты как-то странно трактуешь простое условие
Цитата Сообщение от Valuamba Посмотреть сообщение
те числа,которые являются произведением k различных простых множителей
36 = 2*2*3*3 НЕ ЯВЛЯЕТСЯ произведением различных простых сомножителей
Так же как и 8 = 2*2*2
Требуемыми числами являются 6=2*3, 10 = 2*5, 15=3*5, 30 = 2*3*5, 210 = 2*3*5*7 и т.д.
0
Valuamba
3 / 3 / 4
Регистрация: 03.11.2015
Сообщений: 81
16.12.2016, 20:31  [ТС] #5
а если составить программу не из разлычных простых множителей?
0
Байт
Эксперт C
17756 / 11781 / 2448
Регистрация: 24.12.2010
Сообщений: 23,681
16.12.2016, 20:42 #6
Цитата Сообщение от Valuamba Посмотреть сообщение
а если составить программу не из разлычных простых множителей?
Это будет совсем другая задача. Грамотно сформулируй ее и выложи в новую тему.

Добавлено через 6 минут
Кстати. Я не очень понял приведенного в стартовом посте кода (и в лом разбираться), но можно заметить, что для решения задачи вовсе не обязательно перебирать ЧИСЛА. Надо найти такое n, что Cnk >= s и из n-элементного множества генерировать сочетания по k элементов.
Для s = 15 k=6, n=8. То есть дело придется иметь с очень небольшими числами.
0
Valuamba
3 / 3 / 4
Регистрация: 03.11.2015
Сообщений: 81
16.12.2016, 20:52  [ТС] #7
Я по ходу придумал это условие
Цитата Сообщение от Байт Посмотреть сообщение
а если составить программу не из разлычных простых множителей?
Ну,учитывая,что в программе говорится о выводе первых s<=15 числах,я думаю,что первые 15 таких чисел не будут слишком большие.но это же не мешает искать их
0
16.12.2016, 20:52
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.12.2016, 20:52
Привет! Вот еще темы с решениями:

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

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

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

Даны целые числа a1, a2, ., an. Получить те положительные числа из этой последовательности, которые являются полными квадратами
ПОМОГИТЕ решить задачу на C++ Заранее спасибо! Даны целые числа a1, a2,...


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

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

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