Товарищи,говорю сразу,задачка не школьного уровня и нужна сегодня к вечеру или завтра к...

0 голосов
32 просмотров

Товарищи,говорю сразу,задачка не школьного уровня и нужна сегодня к вечеру или завтра к утру,тому кто решит много баллов!

Вася занимается в математическом кружке и интересуется различными свойствами чисел.Недавно он изучил понятие простого числа. Напомним, что натуральное число n называется простым, если n > 1 и у него есть ровно два делителя: 1 и n.
Особо интересными Вася считает числа, которые представимы в виде произведения двух различных простых чисел. Вася очень хочет найти количество таких чисел среди чисел от 1 до n,однако считать его вручную не хочет. Поэтому он попросил вас написать для него программу,которая будет вычислять это количество.
Задано число п. Необходимо найти количество чисел х от 1 до n, которые представимы в виде произведения двух различных простых чисел.
P/S. Составить блок схему к задаче ;))


Информатика (32 баллов) | 32 просмотров
Дан 1 ответ
0 голосов

Pascal

 var   
n,i,k : integer;    
function Prost (a : integer) : boolean;  //Возвращает true если число простое
var   
i,b : integer;   
r : boolean; 
begin   
r := true;   
i := 2;   
b := a div 2;   
While (i <= b) and (r) do    <br>begin     
if a mod i = 0 then     
r := false;   
i := i +1;   
end;   
Result := r; 
end;  

function chet (l : integer) : integer; //Определяет кол-во     
var   i,s : integer;                        //возможных произведений 
                                                 // в числовой последовательносьти
                                                 //заданной длины
begin   
  s := 0;   
for i := 0 to k do     
s := s +(k - i);    
result := s;    
end;

begin 
readln (n); 
k := 0;     
for i := 2 to n do   
if prost(i) then begin     
k := k +1;      
//write (i,' '); // Вывод простых чисел(если надо, то раскоменьтить)     
end;   
writeln ();
writeln ('Кол-во простых чисел на диапазоне = ',k); 
writeln ('Кол-во произведений ',k,' различных чисел : ',chet(k));    
end. 

Вроде работает, хотя вероятно есть более эффективный алгоритм.
Единицу не учитывал как простое.
Блок схему рисовать не буду - геморойной, да и не силен я в этом

Просто попытаюсь объяснить алгоритм

1) Мы находим все простые числа на диапазоне от 1 до n
(выполняется функцией (prost), и перебором.
2) Исходя из кол-ва найденных простых чисел мы можем найти кол-во их произведений. Т.к все числа различны и идут в порядке увеличения.
Это делается с помощью функции (chet)

(2.6k баллов)