Есть функция, написанная на С++, которая должна раскладывать числа от 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
Дальше этого
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
? :)
И это еще не все, но начните хотя бы с простейшего. И еще - поищите, здесь на сайте тема факторизации рассматривалась много раз.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
В книге Энтони Уильямса "Параллельное программирование на C++ в действии" рекомендуется заменять использование упомянутого в заголовке паттерна...