Разбор интересных задач << 1 ... 8 9 10 11 12 ... 76 >> 19.01.2011 / 23:13 | | XakepPRO Пользователь
| Так самое интересное, это только 9 классу такие задачи, а что с одиннадцатым творится...ужас..
|
20.01.2011 / 08:02 | | XakepPRO Пользователь
| Еще одна задача, которую я ни как не могу понять:
Найдите произведение всех простых чисел, заключенных между числами 1000000 и 2000000, по модулю 23. Опишите ход решения.
Даю 200 монет. Сделать желательно до 23 января(включительно)
|
20.01.2011 / 13:32 | | aleksey Пользователь Сейчас: Offline
Имя: Алексей Откуда: Saint-Petersburg Регистрация: 22.01.2010
| XakepPRO (20.01.2011/08:02) по модулю 23вот это не понятно. Что именн по модулю 23?
|
20.01.2011 / 15:45 | | Freddy Пользователь Сейчас: Offline
Имя: Игорь Откуда: Воронеж Регистрация: 30.01.2010
| XakepPRO (20.01.2011/08:02) Еще одна задача, которую я ни как не могу понять:Найдите произведение всех простых чисел, заключенных между числами 1000000 и 2000000, по модулю 23. Опишите ход решения.Даю 200 монет. Сделать желательЭто значит, что в ответе получится (произведение mod 23). Проблема в том, что произведение получается гигантским и никакой тип данных не вместит такое число, поэтому нужно использовать следующее свойство: модуль произведения равен модулю произведения модулей каждого множителя, т. е. если а*b=c, то ((а mod 23)*(b mod 23) mod 23) = c mod 23 Ищем первое простое число, считаем его модуль по 23, ищем следующее простое число, считаем его модуль, перемножаем с предыдущим, считаем модуль этого произведения, берё следующее простое число и т. д.
Изменено Freddy (20.01 / 15:46) (всего 1 раз) |
20.01.2011 / 16:02 | | Freddy Пользователь Сейчас: Offline
Имя: Игорь Откуда: Воронеж Регистрация: 30.01.2010
| XakepPRO, насчёт третьей задачи, пусть массив PI содержит все 1415 чисел, создаём двумерный массив-счётчик counter размером 10х10, в котором строки равны значению разряда десяток в паре чисел, а столбцы - значению едениц, заполняем его в следующем цикле: for (int i=0;i<PI.length-1;i++)
counter[PI[i]][PI[i+1]]++;
Потом находим наибольшее значение в массиве counter и смотрим индексы этого элемента. |
20.01.2011 / 19:18 | | XakepPRO Пользователь
| 4-ая задача. Найдите произведение всех простых чисел, заключенных между числами 1000000 и 2000000, по модулю 23. Опишите ход решения. Смотрим суда: http://ru.wikipedia.org/wiki/Первообразный_корень_(теория_чисел)И понимаем, что нужно сначала найти все простые числа от 1.000.000 до 2.000.000. Эти числа должны быть "первозданным корнем" по модулю 23. Проверим, является ли данное простое число первообразным корнем по модулю 23. Если это так, то каждое число от 1 до 22 должно быть представлено остатком от деления некоторой степени данного простого числа на 23, действительно, перебором убеждаемся: Возьмём пример числа 3 по модулю 7: 3^0 mod 7 = 1 3^1 mod 7 = 3 3^2 mod 7 = 2 3^3 mod 7 = 6 3^4 mod 7 = 4 3^5 mod 7 = 5 --- 3^6 mod 7 = 1 3^7 mod 7 = 3 3^8 mod 7 = 2 итп... Т.е. идёт повторение. Немного поразмыслив, я подумал, а какие корни идут по определённым модулям? как оказалось такие: По модулю 2: 1, По модулю 3: 2, По модулю 4: 3, По модулю 5: 2, По модулю 6: 5, По модулю 7: 3, 0, 2, 3, 2, 0, 2, 3, 0, 0, 3, 5, 2, 0, 0, 7, 5, 0, 2, 7, 2, 0, 2, 0, 3, 0, 0, 3, 0, 0, 2, 3, 0, 0, 6, 0, 3, 0, 0, 5, 5, 0, 3, 3, 0, 0, 2, 5, 0, 0, 0, 3, 2, 0, 2, 3, 0, 0, 0, 0, 2, 0, 0, 0, 7, 0, 5, 5, 0, 0, 0, 0, 3, 0, 2, 7, 2, 0, 0, 3, 0, 0, 3, 0, 0, 0, 0, 5, 0, 0, 5, 3, 0, 0 Т.е., то что я предлагал искать - бессмысленно. Изменено XakepPRO (20.01 / 19:19) (всего 1 раз) |
20.01.2011 / 19:24 | | XakepPRO Пользователь
| Так, теперь то, что я писал выше надо забыть, и обратиться к посту Freddy, ибо его идея прекрасна. Спасибо тебе, Freddy . Решил посмотреть, что в это время делают конкуренты: на форумах по программированию сидят, и не знают, что делать. Другие программисты говорят, что ничем не могут помочь, ибо даже не могут понять условие. |
20.01.2011 / 19:54 | | XakepPRO Пользователь
| И так. Вот поиск простых чисел+произведение: var a,b : word;
i :integer;
c:real;
begin
c:=1;
writeln;
for i:=1000000 to 2000000 do
begin
a:=2;
b:=round(sqrt(i));
while (i mod a <> 0) and (a <= b) do inc( a );
if (a > b) then
begin
write( i,' ' );
c:=c*(i mod 23);
writeln(c,' ');
end;
end;
end.
Читать его трудно, но для олимпиады оно не важно (пусть считают, что это декомпилированные исходники ). Мне очень понравился результат при i=1004119 i=1004119 c=4.00103201162512E+305
i=1004137 c=1.20030960348754E+306
i=1004141 c=8.40216722441276E+306
i=1004161 c=3.3608668897651E+307
i=1004167 c=бесконечность
i=1004209 c=бесконечность
Хотя тип переменной C - вещественный (real). Самое маленькое положительное число типа real приблизительно равно 5.0*10^(-324), а самое большое: 1.79769313486232E+308. Вот так вот). Но на олимпиаду требуется только объяснение. Изменено XakepPRO (20.01 / 19:55) (всего 3 раза) |
20.01.2011 / 20:27 | | Freddy Пользователь Сейчас: Offline
Имя: Игорь Откуда: Воронеж Регистрация: 30.01.2010
| XakepPRO, В ответе должно получиться целое число из отрезка [0;22], если первый множитель по модулю даёт 10, а второй даёт 3, то их произведение равно не 30, а (30 mod 23) = 7.
Изменено Freddy (20.01 / 20:29) (всего 1 раз) |
20.01.2011 / 20:32 | | XakepPRO Пользователь
| Freddy (20.01.2011/16:02) XakepPRO, насчёт третьей задачи, пусть массив PI содержит все 1415 чисел, создаём двумерный массив-счётчик counter размером 10х10, в котором строки равны значению разряда десяток в паре чисел, а столСколько раз встречается эта пара?
|
<< 1 ... 8 9 10 11 12 ... 76 >> Всего сообщений: 751 Фильтровать сообщения Поиск по теме Файлы топика (34)
|