Показать сообщение отдельно
  #3  
Старый 17.02.2010, 22:02
malekskv malekskv вне форума
Прохожий
 
Регистрация: 13.11.2009
Сообщения: 44
Репутация: 14
По умолчанию фы

Цитата:
Сообщение от s0Creator
А такие числа есть ?

( вообще то это уже математика, которой ужасно давно не занимался поэтому, если кто найдет ошибки - исправьте )

Пусть исходное число = y*100 + x
где x - натуральное число от 0 до 99.
y - любое положительное натуральное число.
(т.е. число 123= 1*100 + 23)

Введем z представляющую порядок
Т.е. z = 10, 100, 1000, .... ( z=10^n)
и
y < z ( если z= 100 y=0..99)

Тогда задачу можно представить в виде системы:

1. y < z
2. (y*100 + x)*2 = x*z + y

2: y*200 - y = x*z - x*2
y * 199 = x * (z - 2)

Подставим в 1.

x * (z - 2) / 199 < z
x*z - x*2 < z * 199
-x*2<z(199-x)
z>-x*2/(199-x)
z - любое ( к сожалению в первом варианте у меня z выходила отрицательным, что означало отсутствие таких чисел, но при переписывании нашел ошибку ).
Зато формула y = x * (z - 2) / 199 позволяет быстро перебрать все варианты в пределах Int64. Я делал это так:
Код:
procedure TForm1.tbChislaClick(Sender: TObject);
var
  x : Integer;
  Zmax, y,z: Int64;
  Surse, Dest: Int64;
begin
  Memo1.Clear;
  ZMax := High(Int64) div 100;// чтобы не вылезти за пределы
  for x := 1 to 99 do
  begin
    z := 10;
    while z <= ZMax do
    begin
      y := x * (z - 2);
      if (y mod 199) = 0 then // y должно быть целым числом
      begin
        y := y div 199;
        Memo1.Lines.Add(Format('(%d) %d - %d',[z, x, y] )); 
      end;
      z := z*10;
    end;
  end;
  Memo1.Lines.Add('STOP');
end;
Но ни одного решения не нашел.


вот ведь пример такого числа 03015075376884422110552763819095477386934673366834 1708542713567839195979899497487437185929648241206 ))

Да ваш вариан не находит ни одного числа.. но я не пойму как работает ваша программа, где идет перестановка чисел в начало или что-то как то так)

P.s это областная олимпиадная задача, так что простым способом ее так не решить, нужно еще как то злощастный нолик учитывать, который может стоять в начале числа и в первой цифре двух последних цифер... как в примере..
Ответить с цитированием