Неправильный вывод программы в С++

219
24 апреля 2017, 04:50

Есть функция, написанная на С++, которая должна раскладывать числа от 1 до N на простые составляющие - то есть, например, 2 - 2, 3 - 3, 4 - 2 и 2, и так далее. При вызове функции, в вывод попадает так же единица, но только когда число является двойкой в какой-либо степени. В чем моя проблема?

void simple_num (unsigned int N) {
unsigned int *simNums = new unsigned int; //Все простые найденные числа до N
simNums[1]=2; //Первое простое число
int n=2; 
for (int i=2; i<N+1; i++){ 
    int q=i;
    cout << i << ": " ;
    for (int j=1; j<n+1; n++){ //проверка делимости на известные простые числа
        if (q%simNums[j]==0){
            cout << simNums[j] << " ";
            q=q/simNums[j];
        } else { //найдено простое число? Ух ты...
            n++;
            simNums[n]=q;
            cout << q;
            break; 
        } 
    }
    cout << endl;
}
delete simNums;
}


Вывод:
2: 2 1
3: 3
4: 2 2 1
5: 5
6: 2 3
7: 7
8: 2 2 2 1
9: 9
10: 2 5
11: 11
12: 2 2 3
Answer 1

Дальше этого

unsigned int *simNums = new unsigned int; //Все простые найденные числа до N
simNums[1]=2; //Первое простое число

не стал и смотреть.

Вы выделяете память для одного числа, simNums[0], и сразу пишете за пределы выделенной памяти - в simNums[1]. После этого говорить вообще не о чем...

Но вы поразили еще и этим:

for (int j=1; j<n+1; n++)

Итак, если n равно хотя бы 1, что будет? j равно 1.
Итерация 1. 1 < 2 - выполняем тело цикла...
Итерация 2. 1 < 3 - выполняем тело цикла...
Итерация 3. 1 < 4 - выполняем тело цикла...
... и так далее... Может, все же ++j? :)

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

READ ALSO
Структуры в файле с++

Структуры в файле с++

Создаю структуруВвожу данный

260
Блокировка с двойной проверкой

Блокировка с двойной проверкой

В книге Энтони Уильямса "Параллельное программирование на C++ в действии" рекомендуется заменять использование упомянутого в заголовке паттерна...

251
контейнер map c++

контейнер map c++

Как использовать контейнер map, для хранения счетчиков?

204
Вывести структуру на экран

Вывести структуру на экран

имеется вот такой код

271