Задание для бабуши! Выполнить на руби. (Страница 3) / Программирование / Форум StopLinux

Объявление

Kwork.ru - услуги фрилансеров от 500 руб.

#51 26-06-11 18:56:08

Lord_Evil
Master Of Darkness
Из Deepest Pits Of Hell
Зарегистрирован: 06-06-10
Сообщений: 1,887
Сайт
Windows XPInternet Explorer 8.0

Re: Задание для бабуши! Выполнить на руби.

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


Интеллигент боится лишь одного — касаться темы зла и его корней, потому что справедливо полагает, что здесь его могут сразу выeбaть телеграфным столбом.©

Неактивен

#52 28-06-11 22:25:20

TrollWINNT
Участник
Зарегистрирован: 02-11-09
Сообщений: 989
Windows 7Opera 11.11

Re: Задание для бабуши! Выполнить на руби.

Lord_Evil пишет:

Вот решишь предложенную  Майором задачу http://euler.jakumo.org/problems/view/340.html и тогда мы дружно признаем, что ты крутой авторитет

Что то компилер с ума спрыгивает smile . Тупой вопрос, 7^21 это скока? Просто у двух компиляторов си мнения капитально расходятся с виндовым калькулятором, а на глаз прав именно калькулятор big_smile . Разница в младших разрядах, а как раз младшие то разряды хоть как нужны smile .


Нет, так мы целей гнусных не достигнем... / В.П. Вишневский

Неактивен

#53 28-06-11 22:42:02

ikkunan salvataja
Участник
Зарегистрирован: 30-01-10
Сообщений: 2,688
LinuxFirefox 4.0.1

Re: Задание для бабуши! Выполнить на руби.

TrollWINNT пишет:

Тупой вопрос, 7^21 это скока?

558545864083284007


Yesterday it worked.
Today it is not working.
Windows is like that.

Неактивен

#54 28-06-11 23:20:15

TrollWINNT
Участник
Зарегистрирован: 02-11-09
Сообщений: 989
Windows 7Opera 11.11

Re: Задание для бабуши! Выполнить на руби.

ikkunan salvataja пишет:

558545864083284007

И виндовый кальк так же говорит. А Си почему то уверен что 558545864083284030, несмотря на long double smile
В результате у моего быдлокода нет шансов smile

#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <math.h>


long double A,B,C,D;
long double F_n(long double n)
{
long double f=0;
                  //D=3*(A-C);
                 while (n<=B)
                        {
                        n=n+A;
                        f=f+D;
                        }
                 f=f+(n-C);
return f;
}

int main(void)
{
 long double f,n=0,n1=0,s=0,s1=0;//A,B,C;
  // A=pow(21,7);
  // B=pow(7,21);
  // C=pow(12,7);

   A=50;
   B=2000;
   C=40;
   D=3*(A-C);
    
    //f=F_n(n); 

    // while (n<=B)
    //  {
    //    s=s+F_n(n);
    //     n++;
    //  }
      while (n1<B)
        {
        n1=n1+A;
        s1=s1+A*((F_n(n1)-A)+((A+1)/2));
        }s1=s1+F_n(0);

   //printf(" \n %Lf %Lf %Lf",A,B,C);
   //printf(" \n %Lf %Lf %Lf",f,s,s1);
      printf(" \n %Lf",s1);
   getch();
   return 0;
}

Хотя у него и так нет шансов, явно нужен другой подход smile


Нет, так мы целей гнусных не достигнем... / В.П. Вишневский

Неактивен

#55 28-06-11 23:32:55

ikkunan salvataja
Участник
Зарегистрирован: 30-01-10
Сообщений: 2,688
LinuxFirefox 4.0.1

Re: Задание для бабуши! Выполнить на руби.

TrollWINNT пишет:

А Си почему то уверен что 558545864083284030, несмотря на long double

Майкрософтовский? Ну этот может, у них помнится на каком то калькуляторе значение синуса могло достигать восьми, даже в мирное время.


Yesterday it worked.
Today it is not working.
Windows is like that.

Неактивен

#56 28-06-11 23:44:33

ikkunan salvataja
Участник
Зарегистрирован: 30-01-10
Сообщений: 2,688
LinuxFirefox 4.0.1

Re: Задание для бабуши! Выполнить на руби.

MOP3E пишет:

Я бы на твоём месте не позорился, а взял в руки бумагу и ручку и посчитал результат.

Да пожалуйста, хоть 7^221, на
5843416508321765137412223462176261055753559544095817424625430781485355014524409616639950700057743469282269362223748969437289370453147445512994056218802090543396973006957507863824356124007


Yesterday it worked.
Today it is not working.
Windows is like that.

Неактивен

#57 28-06-11 23:46:39

mav
phantomas
Зарегистрирован: 29-05-11
Сообщений: 675
Windows 7Firefox 5.0

Re: Задание для бабуши! Выполнить на руби.

ikkunan salvataja пишет:

Майкрософтовский? Ну этот может,

Этому верите?
http://www.wolframalpha.com/input/?i=7^21


Мне больше HP Slate понравился. Его в большой карман можно положить, а у Apple - сковородка какая-то бестолковая. © Руслан Карманов, twitter (-;

Неактивен

#58 28-06-11 23:47:01

TrollWINNT
Участник
Зарегистрирован: 02-11-09
Сообщений: 989
Windows 7Opera 11.11

Re: Задание для бабуши! Выполнить на руби.

ikkunan salvataja пишет:

Майкрософтовский? Ну этот может, у них помнится на каком то калькуляторе значение синуса могло достигать восьми, даже в мирное время.


Калькуль то как раз выдает нормально. Просто для таких чисел встроеных в С типов данных маловато будет smile . У long double 15 знаков точности. Ну и учитывая что при степени B = 17 считается 30 секунд для 21 это  около 3 дней smile . Явно не то решение.


Нет, так мы целей гнусных не достигнем... / В.П. Вишневский

Неактивен

#59 28-06-11 23:56:51

ikkunan salvataja
Участник
Зарегистрирован: 30-01-10
Сообщений: 2,688
LinuxFirefox 4.0.1

Re: Задание для бабуши! Выполнить на руби.

mav пишет:

Этому верите?

Верю, оно с моим совпадает.
А 7^221 я на всякий случай проверил. Во
http://zalil.ru/31351408


Yesterday it worked.
Today it is not working.
Windows is like that.

Неактивен

#60 28-06-11 23:58:45

TrollWINNT
Участник
Зарегистрирован: 02-11-09
Сообщений: 989
Windows 7Opera 11.11

Re: Задание для бабуши! Выполнить на руби.

MOP3E пишет:

Нужно ковырять 64-битную целочисленную арифметику, тогда - получится. Спецбиблиотеки юзать или самому что-то сочинять.

Это не решение. Время вычисления получится несколько дней, а нужно только несколько младших разрядов. Должна быть какая то бяка позволяющая это сделать проще smile


Нет, так мы целей гнусных не достигнем... / В.П. Вишневский

Неактивен

#61 29-06-11 00:00:01

ikkunan salvataja
Участник
Зарегистрирован: 30-01-10
Сообщений: 2,688
LinuxFirefox 4.0.1

Re: Задание для бабуши! Выполнить на руби.

MOP3E пишет:

Кстати, получили результат за 20 итераций. Меньше вряд ли получится.

Ты #7 случаем не пропустил?


Yesterday it worked.
Today it is not working.
Windows is like that.

Неактивен

#62 29-06-11 00:06:46

ikkunan salvataja
Участник
Зарегистрирован: 30-01-10
Сообщений: 2,688
LinuxFirefox 4.0.1

Re: Задание для бабуши! Выполнить на руби.

MOP3E пишет:

Пропустил.

Маладэц, а теперь посчитай сколько итераций там. Можешь воспользоваться калькулятором.


Yesterday it worked.
Today it is not working.
Windows is like that.

Неактивен

#63 29-06-11 00:13:41

TrollWINNT
Участник
Зарегистрирован: 02-11-09
Сообщений: 989
Windows 7Opera 11.11

Re: Задание для бабуши! Выполнить на руби.

MOP3E пишет:

Блин. Погляди мой код хотя бы - где там несколько дней? Там 400 итераций на всё вычисление, причём можно уменьшить до 210.

Мы говорим о различных задачах. Я вобще то об этой    http://euler.jakumo.org/problems/view/340.html


Нет, так мы целей гнусных не достигнем... / В.П. Вишневский

Неактивен

#64 29-06-11 00:21:32

ikkunan salvataja
Участник
Зарегистрирован: 30-01-10
Сообщений: 2,688
LinuxFirefox 4.0.1

Re: Задание для бабуши! Выполнить на руби.

MOP3E пишет:

Ну, как вариант - 20 итераций чтобы выделить степени простых чисел, которые складываются в промежуточный массив, а потом ещё 9 итераций на умножение. Но тогда потребуется ещё один массив.

Не, видно не совсем внимательно читал.
Итак,
a=1
ищем первое простое равное 2.
ищем максимальную степень этого простого не превышающую 20, т.е 4
a=a*2^4
ищем второе простое, т.е 3.
ищем максимальную степень 3 не превышающую 20, нашли.
a=a*3^2
следующее простое - 5, 5^2>20 поэтому устанавливаем флаг отключающий возведение простого в степень и сравнение с 20
a=a*5
a=a*7
Итд.


Yesterday it worked.
Today it is not working.
Windows is like that.

Неактивен

#65 29-06-11 00:40:41

TrollWINNT
Участник
Зарегистрирован: 02-11-09
Сообщений: 989
Windows 7Opera 11.11

Re: Задание для бабуши! Выполнить на руби.

MOP3E пишет:

Не понял второй записи:
F(n) = F(a + F(a + F(a + F(a + n))))
Как это будет вычисляться?

Для данных из примера a = 50, b = 2000 и c = 40
для n=2000
2000 = 2000 то есть 2 формула
F(a+n) => F(50+2000)   2050>2000  то есть  F(2050) = n-c = 2050-40 =2010 =>
F(a+F(n)) => F(50 + 2010) = 2020
F(a+F(n)) => F(50 + 2020) = 2030
F(a+F(n)) => F(50 + 2040) = 2040
Как то так. Несколько сумбурно, но я нихрена не математик smile .  С F(0) все еще тоскливее. 0+50 < 2000 => то есть возвращаемся на функцию и добавляем еще 50 . И так пока выражение в скобках не достигнет 2000. А потом все по цепочке назад. Куча вложений выходит. У меня значение функции для данных из задания и n=0 около 2 секунд считает  smile .

Добавлено спустя 56 мин 19 с:
Если бы B делилось на A - можно бы было прикинуть младшие разряды по такой формулке
s=F_n(B)+(B/A)*((3*(A-C))+(A/2));
А так... придется наверное выделять остаток и считать  smile


Нет, так мы целей гнусных не достигнем... / В.П. Вишневский

Неактивен

#66 13-07-11 18:01:10

Babusha
Нехристь
Зарегистрирован: 12-03-10
Сообщений: 2,160
Windows 7Firefox 5.0

Re: Задание для бабуши! Выполнить на руби.

Раскопаем труп тему, но это надо запостить!

Haskell:

main = do print $ foldl lcm 1 [1..20]
$ time ./hello.exe
232792560

real    0m0.069s
user    0m0.031s
sys     0m0.015s

Неактивен

#67 02-06-12 14:21:53

fooser
Участник
Зарегистрирован: 02-06-12
Сообщений: 692
LinuxIceweasel 9.0.1

Re: Задание для бабуши! Выполнить на руби.

usr_share пишет:

Мдя. Туповатенькое решение. У меня оно за 30 секунд дошло только до одного миллиона.

Такое решение тратит много времени на пропечатку вариантов. Лучше уж так:

/*
    compile with:
    ____________________

    gcc -std=c99 -O3 -Wall -Werror ./file.c
*/

#include <stdio.h>
#include <stdbool.h>

int main( void )
{

    int a = 0;
    int b = 1;
    int c = 20;
    bool d = false;
    int e = 0;

    while(1)
    {
        a++;
        e++;

        if( e == 10000000 )
        {
            printf( "Passed %d...\n", a );
            e = 0;
        }

        for( b = 1; b <= c; b++ )
        {
            if((a % b) != 0)
            {
                break;
            }
            else
            {
                if( b == c )
                {
                    printf("Result: %d\n",a);
                    d = true;
                }
            }
        }

        if( d == true )
        {
            break;
        }
    }

    return(0);
}

Тогда строка "Passed %d ..." будет выдаваться каждые 10 миллионов вариантов, что снизит нагрузку за счет вывода лишней инфы.

Добавлено спустя 02 мин 39 с:

Babusha пишет:

Раскопаем труп тему, но это надо запостить!

Haskell:

main = do print $ foldl lcm 1 [1..20]
$ time ./hello.exe
232792560

real    0m0.069s
user    0m0.031s
sys     0m0.015s

А вы уверены что в эксешнике вообще есть алгоритм? Код мог быть соптимизирован компилятором и содержать только результат.

Редактировался fooser (02-06-12 14:25:43)

Неактивен

Kwork.ru - услуги фрилансеров от 500 руб.
Мой VPS с 2016 года !
✅ Виртуальные от 300 ₽/месяц, RAM 1-10GB, DISK 20-360 GB;
✅ Выделенные от 3000 ₽/месяц. RAM 4-64GB, DISK до 4TB;
✅ Intel Xeon, SSD, XEN, iLO/KVM, Windows/Linux, Администрирование;
✅ Бесплатно Full Backup и Anti-DDoS.





Подвал форума

Под управлением FluxBB
Модифицировал Visman

Яндекс.Метрика