Четверг, 09.01.2025
Pascal 4 All
[ · Новые сообщения · Участники · Правила форума · Поиск · RSS ]

 

  • Страница 2 из 2
  • «
  • 1
  • 2
Модератор форума: Seqular, Pavel  

дружественные числа
AlexanderДата: Пятница, 02.05.2008, 02:43 | Сообщение # 16
Всевышний
Группа: Модераторы
Сообщений: 475
Репутация: 16
Замечания: 0%
Статус: Offline
Quote
Помогите, являються ли x и e дружествами?

Полагаю, что имелось в виду "дружественными", с понятем "дружество" я не знаком.
нет, дружественными могут быть только натуральные, а "e"- иррациональное.
Если под "e" подразумевается не число Эйлера, а любое натуральное, то всё просто и уже разжёванно в этой теме:
1)Берёте "x" и находите сумму его делителей.
2)Сравниваете эту сумму с "e".
3)Если не равна, то выдаёте ответ и выходите.
4) Берёте "e" и находите сумму его делителей.
5) сравниваете полученную сумму с "x" и выдаёте ответ.


Скажем дружно- нафиг нужно!
 
PavelДата: Пятница, 02.05.2008, 09:56 | Сообщение # 17
Приближенный
Группа: Модераторы
Сообщений: 210
Репутация: 17
Замечания: 0%
Статус: Offline
Имхо в начале темы все изложено. Что есть Х и е? Может это кто-то? biggrin
 
PavelДата: Пятница, 02.05.2008, 10:00 | Сообщение # 18
Приближенный
Группа: Модераторы
Сообщений: 210
Репутация: 17
Замечания: 0%
Статус: Offline
Quote (Pavel)
А неясно было, сколько тактов уйдёт на вызов и отработку функции odd

Я вот кстати подумал. Это ж опреация, которая работает с первым битом числа (справа) если 1 - то нечетное, 0 - четное. Думаю, что функция быстрая. На уровне inc по скорости.
 
PavelДата: Пятница, 02.05.2008, 11:04 | Сообщение # 19
Приближенный
Группа: Модераторы
Сообщений: 210
Репутация: 17
Замечания: 0%
Статус: Offline
Я подправил ваш код. (Yamatem) Перед циклами надо было обнулять переменные суммы и делителей. И подправил условия циклов repeat until.
until k <> a div 2; - так лучше не писать, лучше использовать знаки больше или меньше. И вот что тут получается логически: пока не (k <> a div 2) или пока (k = a div 2). Т.е. надо было разобраться с логическими выражениями.
Еще я добавил
if b<>s then continue; вместо того, что было.
И поправил инициализацию самого первого цикла. Было 220, поменял на 300.
И еще сам написал не смотря на вашу программу свой код и результаты у нас теперь одинаковые.
Я тоже не брал одинаковые числа. В своем коде я сужал промежуток делителей.

Code
var
a,b,k,s,m,d:integer;
begin
k:=0;
s:=0;
d:=0;
m:=0;

For b:=1 to 299 do
      for a:=(b+1) to 300 do

      begin

      k := 0;
      s := 0;

      repeat
      k:=k+1;
      if a mod k = 0 then s:=s+k;
      until k > a div 2;

      if b<>s then continue;

      d := 0;
      m := 0;
      repeat
      d:=d+1;
      if b mod d = 0 then m:=m+d;
      until d > b div 2;

      if (b=s)and(a=m) then
      {if a=m then}
      writeln(a,' ',b)
      end;
end.

Мой код:

Code
program forum_druzh_chisla;
uses crt;
var
      a, b: integer;
      s1, s2, i: integer;
      n: integer;

begin
clrscr;

for a := 2 to 299 do
      for b := a + 1 to 300 do
      begin

      if odd(a) then n := a div 3 else n := a div 2;

      s1 := 0;
      for i := 1 to n do
          if a mod i = 0 then s1 := s1 + i;

      if b <> s1 then continue;

      if odd(b) then n := b div 3 else n := b div 2;

      s2 := 0;
      for i := 1 to n do
          if b mod i = 0 then s2 := s2 + i;

      if (a = s2) and (b = s1) then writeln('a = ', a, '; b = ', b);
      end;

readkey;
end.
 
AlexanderДата: Пятница, 02.05.2008, 20:48 | Сообщение # 20
Всевышний
Группа: Модераторы
Сообщений: 475
Репутация: 16
Замечания: 0%
Статус: Offline
Quote
На уровне inc по скорости.

Если на паскале:
Quote
x:=x and 1;
if x=1 then
Result:=true;

Тут всё ясно, я это уже писал- вопрос решён.


Скажем дружно- нафиг нужно!
 
  • Страница 2 из 2
  • «
  • 1
  • 2
Поиск:

Copyright MyCorp © 2025
Используются технологии uCoz
javascript:;" rel="nofollow" onclick="loginPopupForm(); return false;