Новосибирский Государственный Университет
Опубликован: 26.08.2005 | Доступ: свободный | Студентов: 17111 / 2712 | Оценка: 4.07 / 3.55 | Длительность: 13:11:00
ISBN: 978-5-9556-0057-4
Лекция 16:

Функции в примерах

< Лекция 15 || Лекция 16: 123456

Поиск узлов из простых чисел

Всякий, кто изучает простые числа, бывает очарован ими и одновременно ощущает собственное бессилие. Определение простых чисел так просто и очевидно. Найти очередное простое число так легко, разложение на простые сомножители - такое естественное действие! Почему же тогда простые числа столь упорно сопротивляются нашим попыткам постичь порядок и закономерности их расположения? Может быть, в них вообще нет порядка, или же мы так слепы, что не видим их?

Какой-то порядок в простых числах, несомненно, есть. Простые числа можно отсеять от составных решетом Эратосфена. Начнем с того, что 2 - простое число. Теперь выбросим все большие четные числа (делящиеся на 2 ). Первое из уцелевших за двойкой чисел, 3, также должно быть простым. Удалим все его кратные, останется 5. После удаления кратных пяти останется 7. Будем продолжать в том же духе. Все числа, прошедшие через решето, будут простыми. Это регулярная, хотя и медленная процедура находит все простые числа. Оказывается, что все известные методы построения таблицы простых чисел - не что иное, как вариации метода решета. Эйлер придумал формулу x2+x+41. Для всех x от нуля до 39 эта формула дает простые числа. Однако, никакая полиномиальная формула не может давать подряд бесконечный ряд простых чисел. Формула Эйлера терпит фиаско при x=40. Закономерность появления простых чисел проявляется, когда целые числа отображаются на плоскость (или в пространство).

Напишем программу, которая отображает целые числа на плоскость некоторым регулярным образом, и отмечает на рисунке места, где находятся простые числа:

// Построить матрицу А(15x15)таким образом: 
// А(7,7)=1, затем, по спирали против
// часовой стрелки, увеличивая значение 
// очередного элемента на единицу и
// выделяя все простые числа красным цветом 
// заполнить матрицу
#include <stdio.h>
#include <conio.h>
void main(void)
{
	clrscr();
	int mas[15][15];
	int n=1,x=6,y=6,k=1;
	int i,j;
	while(1){
		mas[x][y]=k++;
		switch(n){
			case 1: x++;break;
			case 2: y--;break;
			case 3: x--;break;
			case 4: y++;break;
		}
		if(x==15) break;
		if(x==y && x<6) n=4;
		else if(x+y==12 && x<6) n=1;
		else if(x+y==12 && x>6) n=3;
		else if(x==y+1 && x>6) n=2;
	}
	for(i=0;i<15;i++)
	{
		for(j=0;j<15;j++)
		{
			textcolor(12);
			if(mas[j][i]>2)
			for(k=2;k<mas[j][i];k++)
			if(mas[j][i]%k==0) textcolor(15);
			cprintf("%3d ",mas[j][i]);
		}
		printf("\n");
	}
	getch();
}
< Лекция 15 || Лекция 16: 123456
Вадим Ратьков
Вадим Ратьков

Объясните, пожалуйста, чем отличаются два этих кода?

printf("смешанное деление: 7./4 это %2.2f \n", 7./4);

и

printf("смешанное деление: 7./4 это %f \n", 7./4);

%f  это, понятное дело, float. А что такое %2.2f ?

Вопрос возник при прочтении лекции 3 часть вторая курса Основы программирования на языке C.

http://www.intuit.ru/studies/courses/43/43/lecture/1281?page=2

Анна Алексанина
Анна Алексанина

Я хочу выполнить одну из программ, которые есть в лекции. Но для этого мне надо компилировать текст, а я не знаю, как это сделать. ОС Windows.

Станислав Касабов
Станислав Касабов
Россия, г. Москва
Ильсияр Нигаматьянова
Ильсияр Нигаматьянова
Россия, село Верхние Татышлы