Новосибирский Государственный Университет
Опубликован: 26.08.2005 | Доступ: свободный | Студентов: 17897 / 3045 | Оценка: 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
Максим Сикстус
Максим Сикстус

При выполнении кода из Лекции 11, стр.2 получается результат:

x ravno 16.
x ravno 4.
x ravno 16.
x ravno 14.
x ravno 100.
x ravno 36.

Связано ли это с утверждением, что : "Единственным исключением при замене является макроопределение, находящееся внутри двойных кавычек"?

Андрей Белоусов
Андрей Белоусов

Я изучаю лекцию 5 и в ней есть выражения:

char *pc;

pc = (char*)0777;

Я так понял что, char *pc это ссылка на переменную pc,

0777 это тип int восьмиричный. А что делает выражение:

 pc = (char*)0777;

Юрий Цыганов
Юрий Цыганов
Россия, Вологда, Вологодский государственный педагогический университет, 2006
Сергей Истрате
Сергей Истрате
Молдова, Республика, Кишинев, Славянский Университет Молдовы, 2010