IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Совершенные числа, и что-то еще про цикл.
Ромка
сообщение 20.02.2005 20:31
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 17
Пол: Мужской

Репутация: -  0  +


Составить программу для графического изображения делимости чисел от 1 до n (n - исходное данное). В каждой строке надо печатать число и сколько плюсов, сколько делителей у этого числа. Например, если исходное данное - число 4, то на экране должно быть напечатано:


1+

2++

3++

4+++

Составить программу получения всех совершенных чисел, меньших заданного числа n. Число называется совершенным, если равно сумме всех своих положительных делителей, кроме самого этого числа. Например, 28 - совершенно, так как 28=1+2+4+7+14.
Даны натуральные числа n, m. Получить все меньшие n натуральные числа, квадрат суммы цифр которых равен m.
Даны натуральные числа n и m. Найти все пары дружественных чисел, лежащих в диапазоне от n до m. Два числа называются дружественными, если каждое из них равно сумме всех делителей другого (само число в качестве делителя не рассматривается).
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 16)
volvo
сообщение 20.02.2005 20:47
Сообщение #2


Гость






Правила читать будем? FAQ и поиск зачем?
Совершенные числа
 К началу страницы 
+ Ответить 
Ромка
сообщение 20.02.2005 20:52
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 17
Пол: Мужской

Репутация: -  0  +


ne nashol !!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Altair
сообщение 20.02.2005 21:04
Сообщение #4


Ищущий истину
******

Группа: Модераторы
Сообщений: 4 824
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


плохо искал.


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Ромка
сообщение 20.02.2005 21:07
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 17
Пол: Мужской

Репутация: -  0  +


Rebjat, mozhet prosto pomozhete... Esli vam vsjo jasno i do boli ponjatno...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Altair
сообщение 20.02.2005 21:50
Сообщение #6


Ищущий истину
******

Группа: Модераторы
Сообщений: 4 824
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


Поиск совершенных чисел.
Цитата
Определенный интерес для любителей представляет программа поиска совершенных чисел. Ее схема проста: в цикле для каждого числа проверять сумму его делителей и сравнивать ее с самим числом, - если они равны, то это число совершенное.


Код
VAR I,N,Summa: LONGINT;
  Delitel: INTEGER;
begin FOR I:=3 TO 34000000 DO BEGIN Summa:=1;
 FOR Delitel:=2 TO SQRT(I)
 DO BEGIN N:=(I DIV Delitel);
       IF N*Delitel=I THEN Summa:=Summa + Delitel + (I DIV Delitel);
  END;
 IF INT(SQRT(I))=SQRT(I) THEN Summa:=Summa-INT(SQRT(I));
  IF I=Summa THEN WRITELN(I,’ - ‘,Summa);
  END;
END.


Проверка: простое-ли число.
(вполне подходит для не самых больших чисел)
Код

function isPrime(X: word): boolean;
var
i: integer;
Begin
isPrime:=false;
for i:=2 to trunc(sqrt(x)) do
if x mod i = 0 then Exit;
isPrime:=true
End;



это з фака.... пожалуй этого должно хватить


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Ромка
сообщение 20.02.2005 21:58
Сообщение #7


Новичок
*

Группа: Пользователи
Сообщений: 17
Пол: Мужской

Репутация: -  0  +


pishel ordinal expression expected na etoj stroke DO BEGIN N:=(I DIV Delitel);
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Altair
сообщение 20.02.2005 22:20
Сообщение #8


Ищущий истину
******

Группа: Модераторы
Сообщений: 4 824
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


так:


VAR I,N,Summa: LONGINT;
Delitel: INTEGER;
begin
FOR I:=3 TO 34000000 DO
BEGIN
Summa:=1;
FOR Delitel:=2 TO trunc(SQRT(I)) DO
BEGIN
N:=(I DIV Delitel);
IF N*Delitel=I THEN Summa:=Summa + Delitel + (I DIV Delitel);
END;
IF INT(SQRT(I))=SQRT(I) THEN Summa:=Summa-trunc(SQRT(I));
IF I=Summa THEN WRITELN(I,' - ',Summa);
END;
END.


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Altair
сообщение 20.02.2005 22:26
Сообщение #9


Ищущий истину
******

Группа: Модераторы
Сообщений: 4 824
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


еще один пост на транслите и тема будет закрыта!


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Ромка
сообщение 20.02.2005 22:27
Сообщение #10


Новичок
*

Группа: Пользователи
Сообщений: 17
Пол: Мужской

Репутация: -  0  +


ссори, не заметил твоё мсг. всё транслиту - нет !!
давно пора, в XXI веке живем, есть поддержка всех языков...

Сообщение отредактировано: Oleg_Z - 20.02.2005 22:29
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Ромка
сообщение 21.02.2005 18:20
Сообщение #11


Новичок
*

Группа: Пользователи
Сообщений: 17
Пол: Мужской

Репутация: -  0  +


Даны натуральные числа n и m. Найти все пары дружественных чисел, лежащих в диапазоне от n до m. Два числа называются дружественными, если каждое из них равно сумме всех делителей другого (само число в качестве делителя не рассматривается).
Что-то никак не получается...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Altair
сообщение 21.02.2005 18:30
Сообщение #12


Ищущий истину
******

Группа: Модераторы
Сообщений: 4 824
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


а ты покажи что получается...
Код в студию, что уже написанно.


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Ромка
сообщение 21.02.2005 18:59
Сообщение #13


Новичок
*

Группа: Пользователи
Сообщений: 17
Пол: Мужской

Репутация: -  0  +


Код
uses crt;
var n,m,del1,del2,per,vtor,summ1,summ2:integer;
begin
readln (n,m);
summ1:=0;
summ2:=0;
for per:=n to m do
for vtor:=n to m  do
begin
for del1:= n to m do
for del2:= n to m do
if (per mod del1=0) then inc (summ1);
if (vtor mod del2=0) then inc (summ2);
end;
if (summ1-per)=(summ2-vtor) then writeln (per,' ', vtor);
readkey;
end.

виснет... хэлп !!!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 21.02.2005 19:29
Сообщение #14


Гость






Нет, она не виснет, она просто очень долго считает... Ты же пользуешься полным перебором - нерационально. Можно попробовать воспользоваться известной формулой для нахождения пар дружественных чисел (см. аттач)


Эскизы прикрепленных изображений
Прикрепленное изображение
 К началу страницы 
+ Ответить 
Ромка
сообщение 21.02.2005 21:06
Сообщение #15


Новичок
*

Группа: Пользователи
Сообщений: 17
Пол: Мужской

Репутация: -  0  +


Спасибо. Ну может кто-то знает полегче вариант, а то этот я не осилю. я нуб...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 21.02.2005 21:12
Сообщение #16


Гость






Цитата(Ромка @ 21.02.05 20:06)
может кто-то знает полегче вариант, а то этот я не осилю.

Чем легче вариант - тем дольше он будет работать... А тут главное - скорость... А сложного в этом абсолютно ничего нет...

Код
Function PowerTwo(n: Byte): LongInt;
 Begin
   PowerTwo := LongInt(2) shl Pred(n)
 End;

Function IsPrime(X: LongInt): Boolean;
 Var i: integer;
 Begin
   isPrime := False;
   For i := 2 To Trunc(Sqrt(x)) Do
     If x mod i = 0 Then Exit;
   isPrime := True
 End;

Var
 n: integer;
 p, q, r: longint;
 a, b: Longint;

Const
{ Интервал }
 _n = 10;
 _m = 1000;
begin
 For n := 2 To 15 Do
   Begin
     p := 3 * PowerTwo(Pred(n)) - 1;
     q := 3 * PowerTwo(n) - 1;
     r := 9 * PowerTwo(Pred(2*n)) - 1;

     If isPrime(p) and isPrime(r) and isPrime(q) Then
       Begin
         a := PowerTwo(n) * p * q;
         b := PowerTwo(n) * r;
         If (a > _n) and (a < _m) and
            (b > _n) and (b < _m) Then
           WriteLn('The pair is: ', a:10, ' and ', b: 10)
       End;
   End;
end.
 К началу страницы 
+ Ответить 
Ромка
сообщение 21.02.2005 21:30
Сообщение #17


Новичок
*

Группа: Пользователи
Сообщений: 17
Пол: Мужской

Репутация: -  0  +


Спасибо, вы очень помогли!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 21.07.2025 6:48
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"