infoarena

Comunitate - feedback, proiecte si distractie => Feedback infoarena => Subiect creat de: FMI Ciprian Olariu din Octombrie 16, 2010, 17:03:57



Titlul: Ce este signal 8?
Scris de: FMI Ciprian Olariu din Octombrie 16, 2010, 17:03:57
La problema aceasta de ce apare "Killed by signal 8"?  ???
http://infoarena.ro/job_detail/493067


Titlul: Răspuns: Ce este signal 8?
Scris de: Petru Trimbitas din Octombrie 16, 2010, 17:59:44
probabil impartire la 0. Gasesti mai multe aici: blogpetru.wordpress.com/2010/10/06/killed-by-signal-reasons/


Titlul: Răspuns: Ce este signal 8?
Scris de: FMI Ciprian Olariu din Octombrie 16, 2010, 20:36:38
nu e asta,uita-te si tu ca in tot programul am o imparitire si n-are nici o treaba cu 0

va rog uitati-va careva pe cod si ziceti de ce e signal 8,ca problema da bine daca o verificati cu exemple  ???

Cod:
#include<fstream>
using namespace std;
int a[45001],prime[5000],n,e[5000],v[20001];
int main()
{
long int i,j;
for (i=4;i<=45000;i=i+2)
a[i]=1;
for (i=3;i<=45000;i=i+2)
if (a[i]==0)
for (j=i*i;j<=45000;j=j+2*i)
a[j]=1;
n=0;
for (i=2;i<=45000;i++)
if (a[i]==0)
prime[n++]=i;


long int a,b,nrdiv=0,aux,nr=0,contor=0,k,w,x=0,e1=0,f1;
ifstream fin("maxd.in");
ofstream fout("maxd.out");
fin>>a>>b;
long int min=a;
for(i=a;i<=b;i++)
                 {e1=0;
             w=0;
             k=0;
             aux=i;
             nr=1;
                     while(aux!=1)
                          {f1=prime[k];
                      e1=0;
                      while (aux%f1==0 && aux!=1)
                            {aux=aux/f1;
                        e1++;
                            }
                                  if (e1 != 0)
                         {e[w]=e1;
                                     w++;
                         }
                                  k++;
                          }
                     for(j=0;j<w;j++)
                                     if(e[j]!=0) nr=nr*(1+e[j]);
                     if(nr>nrdiv) nrdiv=nr;
             v[x]=nr;
             x++;
             for(j=0;j<5000;j++)
                                e[j]=0;
                 }
for(i=0;i<=x;i++)
if(v[i]==nrdiv)
               {contor++;
           if(v[i]==nrdiv && contor==1) min=a+i;
               }
fout<<min<<' '<<nrdiv<<' '<<contor;
fin.close();
fout.close();
return 0 ;
}


Titlul: Răspuns: Ce este signal 8?
Scris de: Florian Marcu din Octombrie 16, 2010, 20:51:24
Verifica-ti programul pe testele de la OJI.


Titlul: Răspuns: Ce este signal 8?
Scris de: MciprianM din Octombrie 18, 2010, 20:18:07
La restrictii apare a si b mai mici ca 2 miliarde. Asta inseamna ca in teste o sa fie un numar care o sa contina un factor prim mai mare de 45000, de unde si impartirea cu 0 si eroarea sigfpe.


Titlul: Răspuns: Ce este signal 8?
Scris de: FMI Ciprian Olariu din Octombrie 19, 2010, 18:51:53
La restrictii apare a si b mai mici ca 2 miliarde. Asta inseamna ca in teste o sa fie un numar care o sa contina un factor prim mai mare de 45000, de unde si impartirea cu 0 si eroarea sigfpe.

mda,s-ar parea ca ai dreptate,dar acum ca am mai marit vectorii pt ciur,imi zice signal 11 pana sa fi verificat daca nu depasesc si marimea pt stiva :|
signal 11 stiu ca era depasirea limitelor unui vector,dar de ce dracu da asta? :|
http://infoarena.ro/job_detail/493879


Titlul: Răspuns: Ce este signal 8?
Scris de: Savin Tiberiu din Octombrie 19, 2010, 22:40:39
Cred ca e din cauza unui common mistake la ciur.
Cod:
for (i=3;i<=100000;i=i+2)
        if (a[i]==0)
            for (j=i*i;j<=100000;j=j+2*i)
                a[j]=1;
Aici, in momentul in care i ajunge la 50 000 sau ceva de genu, j = i * i va iesi din int si va face overflow => j-ul va deveni un numar negativ iar cand faci a[j] = 1 => Killed by signal 11.


Titlul: Răspuns: Ce este signal 8?
Scris de: MciprianM din Octombrie 20, 2010, 19:02:30
Nu e nevoie sa maresti vectorii pentru ciur ca sa eviti problema de care ti-am zis eu. Fiecare numar intre 1 si 2000000000 are cel mult un factor prim mai mare decat sqrt(2000000000). Gandeste-te!