Страниц: 1 2 [3]
  Печать  
Автор Тема: Два бога и монетка (программирование)  (Прочитано 24809 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Sirion
Гений-Говорун
*****
Offline Offline

Сообщений: 1095

СПАСИБО
-вы поблагодарили: 137
-вас поблагодарили: 278



Просмотр профиля Email
Ответ #30 : Декабрь 03, 2012, 15:55:44 �

И действительно, таки ня.
Записан

sirion=irion+srion+rion+siion+iion+sion+ion+siron+iron+sron+ron+sion+ion+son+on+sirin+
+irin+srin+rin+siin+iin+sin+in+sirn+irn+srn+rn+sin+in+sn+n+sirio+irio+srio+rio+siio+
+iio+sio+io+siro+iro+sro+ro+sio+io+so+o+siri+iri+sri+ri+sii+ii+si+i+sir+ir+sr+r+si+i+s
mayer
Гений-Говорун
*
Offline Offline

Сообщений: 1943

СПАСИБО
-вы поблагодарили: 1011
-вас поблагодарили: 332


!!!!!!

22011996 2201199+6 2201199+36
Просмотр профиля
Ответ #31 : Декабрь 04, 2012, 10:12:58 �

И действительно, таки ня.

 ключ  к Пентагону найден  Cheesy
Записан

Максимум символов - 800; Осталось: 300
dimon3454
Новенький
*
Offline Offline

Сообщений: 1

СПАСИБО
-вы поблагодарили: 0
-вас поблагодарили: 0


Просмотр профиля
Ответ #32 : Март 17, 2013, 10:11:39 �

Но тут вмешался я и что у меня получилось:-)
A-кол-во бросков n1-решка n2 - орел
Если А=(например)10 то казалось бы вероятность 50/50( n1/n2) НО если это английская монетка то ученые доказали что вероятность равна 67.2/32.8 и даже вычисляем:
 n1 : n2 дальше сами:-)
Записан
пестерь
Умник
****
Offline Offline

Сообщений: 706

СПАСИБО
-вы поблагодарили: 111
-вас поблагодарили: 204



Просмотр профиля
Ответ #33 : Март 17, 2013, 10:28:32 �

Но тут вмешался я и что у меня получилось:-)
A-кол-во бросков n1-решка n2 - орел
Если А=(например)10 то казалось бы вероятность 50/50( n1/n2) НО если это английская монетка то ученые доказали что вероятность равна 67.2/32.8 и даже вычисляем:
 n1 : n2 дальше сами:-)
в условии монета симметричная
Записан

За решительные полумеры
☭-Изделие 20Д
Ум
*****
Offline Offline

Сообщений: 7915

СПАСИБО
-вы поблагодарили: 6291
-вас поблагодарили: 2537


[img] http://s016.radikal.ru/i337/1409/6a/5b2b5c71

614445846
Просмотр профиля Email
Ответ #34 : Март 17, 2013, 16:07:20 �

Но тут вмешался я и что у меня получилось:-)
A-кол-во бросков n1-решка n2 - орел
Если А=(например)10 то казалось бы вероятность 50/50( n1/n2) НО если это английская монетка то ученые доказали что вероятность равна 67.2/32.8 и даже вычисляем:
 n1 : n2 дальше сами:-)
А что если одну сторону монетки намазать маслом Huh? - заодно закроем закон бутерброда. Крутой
Записан

or0ez
Новенький
*
Offline Offline

Сообщений: 5

СПАСИБО
-вы поблагодарили: 0
-вас поблагодарили: 0


Просмотр профиля
Ответ #35 : Декабрь 23, 2019, 11:13:09 �

программа на С.
число вычисляемых знаков пропорционально N:(2.4*N).

Код:
#include <stdio.h>
#include <stdlib.h>

#define N 500
#define u16 unsigned short
#define u32 unsigned

typedef struct{u16 q[N];short nz;}u16N;
typedef struct{u16N u0,u1;}u16N2;

u16N new16N(){u16N a;for(int i=0;i<N;i++)a.q[i]=0;a.nz=0;return a;}

u16N toU16N(u32 n){u16N a=new16N();a.q[0]=n;a.q[1]=(n>>16);a.nz=a.q[1]?2:(a.q[0]?1:0);return a;}

u16N sum(u16N a,u16N b){
    int m=a.nz>=b.nz?a.nz:b.nz;
    u16N s=new16N();
    u32 c=0;
    for(int i=0;i<m;i++){u32 t=c+a.q[i]+b.q[i];s.q[i]=t;c=t>>16;}
    if(c&&m<N)s.q[m]=1;
    s.nz=nZ(s.q);
    return s;
}

u16N inv(u16N a){
    u16N b;
    for(int i=0;i<N;i++)
    b.q[i]=~a.q[i];
    b.nz=nZ(b.q);
    return b;
}

u16N subt(u16N a, u16N b){return sum(a,sum(inv(b),toU16N(1)));}

int nZ(u16 q[N]){int cnt=N;for(int i=N-1;i>=0;i--)if(q[i])break;else cnt--;return cnt;}

u16N shL0(u16N a,int n){
    u16N b=new16N();
    u16 c=0;
    for(int i=0;i<a.nz;i++){u32 r=c|((u32)a.q[i]<<n);b.q[i]=r;c=r>>16;}
    if(a.nz<N)b.q[a.nz]=c;
    b.nz=nZ(b.q);
    return b;
}

u16N shL(u16N a,int n){
    u16N b=shL0(a,n&0xf);
    int n1=n>>4;
    if(n1)for(int i=a.nz;i>=0;i--){int j=i+n1;if(j<N)b.q[j]=b.q[i];if(i<N)b.q[i]=0;}
    b.nz=nZ(b.q);
    return b;
}

u16N shR(u16N a){
    u16N b=new16N();
    for(int i=a.nz-1;i>=0;i--){u32 u=(i==a.nz-1?0:a.q[i+1]);u32 w=(u<<16)|a.q[i];b.q[i]=(w>>1);}
    b.nz=nZ(b.q);
    return b;
}

int max1(u16N a){
    int k=-1;
    if(a.nz){for(int i=15;i>=0;i--)if((a.q[a.nz-1]>>i)&1){k=i;break;}k+=(a.nz-1)<<4;}
    return k;
}

int cmp(u16N a, u16N b){
    int s=a.nz-b.nz;
    if(s)return s;
    for(int i=a.nz-1;i>=0;i--)if(s=a.q[i]-b.q[i])return s;
    return 0;
}

void show10(u16N a, u16N b){
    u16 m[N];
    for(int i=N-1;i>=0;i--){
        u16 r=0;
        for(int j=0;j<16;j++){
            b=shR(b);
            r<<=1;
            if(cmp(a,b)>=0){a=subt(a,b);r|=1;}
        }
        m[i]=r;
    }
    int n=(int)(N*0.6);
    u16 d[n];
    int cnt=0;
    int k=0;
    while(k<N&&cnt<n){
        u32 c=0;
        for(int i=k;i<N;i++){
            u32 t=(u32)10000*m[i]+c;
            m[i]=t;
            c=t>>16;
        }
        d[++cnt-1]=c;
        for(int i=k;i<N;i++)
            if(!m[i]){k=i;break;}
    }
    for(int i=0;i<cnt;i++){printf(" %04d",d[i]);if((i+1)%15==0)printf("\n");}
    printf("\n");
}

u16N fn(int n,u16N*p){
    if(n>1){
        p[n]=shL(p[n-1],1);
        if(!(n&1))p[n]=subt(p[n],p[n>>1]);
    }
    return p[n];
}

int main()
{
    int size=N<<3;
    u16N* a=(u16N*)malloc(size*sizeof(u16N));
    a[0]=toU16N(0);a[1]=toU16N(1);
    u16N numin=toU16N(0);
    int i=0;
    while(i<size-1&&(N<<4)-max1(numin)>4)
        numin=sum(shL0(numin,2),fn(++i,a));
    u16N denom=shL(toU16N(1),i+i-1);
    show10(numin,denom);
    return 0;
}
Записан
Страниц: 1 2 [3]
  Печать  
 
Перейти в: