Найти парные простые числа из набора - C (СИ)
Формулировка задачи:
Помогите объяснить , что делает цикл for
Вот сама задача: Парными простыми числами называют 2 простых числа, разность которых равно 2, например: 3и 5; 17 и 19. Напишите программу нахождения n таких пар
Заранее спасибо!)
#include <stdio.h>
#include <conio.h>
long i,j,a,k1,k2,n,n1;
int main()
{
printf("n="); scanf("%d",&n);
k1==0; k2==0; n1==0;
for(i=1;i<=2000;i++) //этот
{
a=0;
for(j=1;j<=i;j++) //и этот
{
if(i%j==0)
{
a += j;
}
}
if(a-1==i)
{
if (n1!=n)
{
if (k1==0){k1=i;} else k2=i;
if (k1!=0 & k2!=0)
{
if(k2-k1==2 ){n1 += 1 & printf("%d %d \n",k1,k2) & (k1=i);} else (k1=i);
}
}
}
}
}Решение задачи: «Найти парные простые числа из набора»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
int prostoeli(int n)
{
int i;
int k = n;
if(n == 1) return 0;
for(i = 2; i <= n/2; i++) {
if(k % i == 0) return 0;
}
return 1;
}
int main()
{
int n;
int k = 1;
scanf("%d", &n);
int i = 0;
while(i != n) {
if(prostoeli(k) && prostoeli(k+2)) {
printf("%d %d\n", k, k+2);
i++;
}
k+=2;
}
}
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы для работы сprintf и функциями работы с памятью
- Создаем функцию prostoeli(int n), которая проверяет является ли число простым. В функции используется цикл for от 2 до n/2, который проверяет делится ли число на какое-либо из этих значений. Если делится, то число не является простым и функция возвращает 0. Если цикл завершается без возврата функции, то число простое и функция возвращает 1
- В функции main() считываем из консоли число n, которое определяет количество пар простых чисел, которые нужно найти
- Создаем переменную k равную 1 и начинаем цикл while, который будет выполняться до тех пор, пока не будет выполнено условие i == n. В каждой итерации цикла проверяем являются ли числа k и k+2 простыми с помощью функции prostoeli. Если оба числа простые, то выводим их на экран и увеличиваем значение i на 1
- После каждой итерации цикла увеличиваем значение k на 2