Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Деление длинных чисел 
:(
    Опции темы
HellanD
Дата 20.2.2008, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 443
Регистрация: 16.5.2006
Где: Киев

Репутация: 1
Всего: 2



Захотел я как то факторизировать число 317584931803

Написал для этого алгоритм

Код

def factor(number):
 #Treated number is an every number which can divide our big integer
   Largest = 1
   variant = 2
   while variant <= number:
      #print "The variant%d" %variant
      print "the variant is %d the result of division: %d" %(variant, number%variant)
      
      while int(number%variant) is 0:
         # print number%variant
         number = number/variant
         print "Temp result %d and variant %d" %(number, variant)
         if isFactor(variant) is 1:
            Largest = variant
            print "The temp laregest is %d, %d" %(Largest, number)

      variant = variant + 1
   return Largest  

def isFactor(variant):
   i = variant/2
   while variant%i is not 0:
      i = i-1
   if i is 1: return 1
   else: return 0      


      

#print "The result is %d" %isFactor(2)
print "The result is %d" %factor(317584931803)



Получил результат:

.......
the variant is 3917 the result of division: 2
the variant is 3918 the result of division: 1
the variant is 3919 the result of division: 0
Temp result 1 and variant 3919
The temp laregest is 3919, 1
The result is 3919


Вопрос! Почему после операции  number = number/variant я получаю number =1 ?





--------------------
Мой сайт на django
Japanese Innovations
PM ICQ   Вверх
pythonwin
Дата 20.2.2008, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 14
Всего: 36



потому-что при делении целого числа на целого числа на целое число получается целое число:
Код

>>> 1/2
0
>>> 1/2.
0.5
 

PM WWW GTalk Jabber   Вверх
HellanD
Дата 20.2.2008, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 443
Регистрация: 16.5.2006
Где: Киев

Репутация: 1
Всего: 2



хм. Я в курсе! 

Вот вообщем в чем дело: 317584931803/3919 делиться нацело! Так что тут ты похоже не прав!


--------------------
Мой сайт на django
Japanese Innovations
PM ICQ   Вверх
pythonwin
Дата 20.2.2008, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 14
Всего: 36



Цитата(HellanD @  20.2.2008,  14:56 Найти цитируемый пост)
Вот вообщем в чем дело: 317584931803/3919 делиться нацело! Так что тут ты похоже не прав! 

смотри пример ниже:
Код

>>> 317584931803/3919
81037237L
>>> 317584931803/3919.
81037237.0
>>> 317584931803/3920
81016564L
>>> 317584931803/3920.
81016564.235459179
>>> 4/2==2.
True


PM WWW GTalk Jabber   Вверх
HellanD
Дата 20.2.2008, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 443
Регистрация: 16.5.2006
Где: Киев

Репутация: 1
Всего: 2



т.е. у меня число не было преобразовано к целому типу данных? По этому там L?



Правильно было написать  number = number/variant.   ???


Но тогда 

Код

    number = (number/variant).


Добавлено через 45 секунд
>>>   File "/tmp/py1172XHt", line 14
    number. = number/variant
            ^
SyntaxError: invalid syntax
>>> 


--------------------
Мой сайт на django
Japanese Innovations
PM ICQ   Вверх
pythonwin
Дата 20.2.2008, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 14
Всего: 36



Цитата(HellanD @  20.2.2008,  15:33 Найти цитируемый пост)
    number. = number/variant

слушай - хватит писать пхп-ным одом в питоне. 

Цитата(HellanD @  20.2.2008,  15:33 Найти цитируемый пост)
number = number/variant

если в результате нужно получить float, то можно сделать так:
Код

>>> number = 5
>>> variant = 4
>>> number/float(variant)
1.25

PS если в конце числовой константы "2" поставить точку, то это будет "2.0"
Код

>>> 2.
2.0

PM WWW GTalk Jabber   Вверх
HellanD
Дата 20.2.2008, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 443
Регистрация: 16.5.2006
Где: Киев

Репутация: 1
Всего: 2



Цитата

слушай - хватит писать пхп-ным одом в питоне. 


Что ты имеешь ввиду?


--------------------
Мой сайт на django
Japanese Innovations
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.4396 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.