C/C++

Си. Цикл for. Что не так? Составить программу вывода на экран всех простых чисел не превосходящих введеннного числа N

#include
void main()
{
int j,k,i,N;
printf ("Введите число N ");
scanf("%d",&N);
for (i=2;i=N;i++)
k=0;
for (j=2;i-1;j++)
{
if (i % j == 0)
k=k+1;
if (k==0)
printf("Простых чисел до %d не сущетсвует",N);
}
printf ("Список простых чисел: %d ",i);
}
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <locale.h>
bool is_prime(unsigned num) {
bool prime;
if (num <= 5 && (num <= 2 || num == 3 || num == 5)) prime = true;
else if (~num & 1 || 0 == num % 3 || 0 == num % 5) prime = false;
else {
unsigned n;
for (n = 3; n * n <= num && num % n; n += 2) { ; }
prime = n * n > num? true : false;
}
return prime;
}
int main(void) {
unsigned num;
setlocale(LC_CTYPE, "Russian");
printf("Введите целое положительное число: ");
scanf_s("%u", &num);
for (unsigned n = 2; n <= num; ++n) if (is_prime(n)) printf("%u ", n);
putchar('\n');
system("pause > nul");
return 0;
}
Андрей Матвеев
Андрей Матвеев
81 487
Лучший ответ
В заголовке цикла по i вместо условия i<=N e тебя стоит ПРИСВАИВАНИЕ i=N.

Сам же цикл по i состоит из ЕДИНСТВЕННОГО выражения: k=0;.

Цикл по j находится ПОСЛЕ цикла по i, а не внутри его.

Условие i-1 в заголовке цикла по j не имеет смысла и гарантирует, что цикл по j будет крутиться очень долго - пока значение j не станет равным 0 и произойдёт ошибка деления на 0.

Проверка k==0 находится в, мягко говоря, странном месте: сообщения "простых чисел не существует" ты будешь получать многократно - вперемешку с искомыми значениями простых чисел.

Перед выводом значения простого числа нет проверки, что число действительно простое. Потому, в зависимости от того, где ты поставишь конец цикла по i, будет вывод либо всех чисел (и простых и составных), либо будет выведено единственное значение N+1.

Думаю, для начала шести "не так" достаточно.
Станислав Костров Хорошо, я понял, тогда где мне лучше сделать проверку k==0?
Станислав Костров И чем мне заменить условие i-1?
Станислав Костров Понял, но куда мне тогда поставить?
Станислав Костров Так неправильно ?
#include
void main()
{
int j,k,i,N;
k=0;
printf ("Введите число N ");
scanf("%d",&N);
for (i=2;i<=N;i++)
{
}
for (j=2;i;j++)
{
if (i % j == 0)
{
k=k+1;
printf ("Список простых чисел: %d ",i);
}
}
}
Станислав Костров Я переделал код, что мне делать дальше?
#include
void main()
{
int j,k,i,N;
printf ("Введите число N ");
scanf("%d",&N);
k=0;
for (i=2;i<=N;i++)
{
for (j=2;i-1;j++)
{
if (i % j == 0)
k=k+1;
}
}
if (k==0)
printf("Простых чисел до %d не сущетсвует",N);
else
printf ("Список простых чисел: %d ",i);
}
Александр Карякин for (i = 2; i <= N; i++) {
int flg = 1;
for (j = 2; j < i; j++) {
if (i % j == 0) { flg = 0; break; }
}
if (flg) { printf("%d",i); k += 1; }
}
Мб условие должно быть i<=N? И, по-моему, где-то забыты {}
Kostia Dzy
Kostia Dzy
12 733
Станислав Костров исправил, программа после ввода N просто ничего не выводит
Kostia Dzy В некоторых языках нумерация с 1 идёт, а в более популярных (нормальных) языках с 0
Kostia Dzy Если открываешь if, else, while, for и т. п., то нужно открывать {} и в них писать код, который выполняется внутри if, else, while, for и т. п

Похожие вопросы