Есть функция, написанная на С++, которая должна раскладывать числа от 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? :)
И это еще не все, но начните хотя бы с простейшего. И еще - поищите, здесь на сайте тема факторизации рассматривалась много раз.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей