infoarena

infoarena - concursuri, probleme, evaluator, articole => Informatica => Subiect creat de: FMI Ekart Dragos-Ioan din Iulie 19, 2010, 11:42:49



Titlul: Unde am gresit
Scris de: FMI Ekart Dragos-Ioan din Iulie 19, 2010, 11:42:49
Problema este din arhiva si anume:Numere prime.
Raport evaluator
Compilare:
user.cpp:38:2: warning: no newline at end of file
user.cpp: In function 'int main()':
user.cpp:16: warning: 'd' is used uninitialized in this function

Test Timp executie Memorie folosita Mesaj Punctaj/test
1 0ms 8kb Killed by signal 11(SIGSEGV). 0
2 0ms 12kb Killed by signal 11(SIGSEGV). 0
3 4ms 8kb Killed by signal 11(SIGSEGV). 0
4 0ms 8kb Killed by signal 11(SIGSEGV). 0
5 0ms 8kb Killed by signal 11(SIGSEGV). 0
6 4ms 12kb Killed by signal 11(SIGSEGV). 0
7 0ms 8kb Killed by signal 11(SIGSEGV). 0
8 0ms 12kb Killed by signal 11(SIGSEGV). 0
9 0ms 16kb Killed by signal 11(SIGSEGV). 0
10 0ms 8kb Killed by signal 11(SIGSEGV). 0
Punctaj total 0
Rezolvarea mea:

Cod:
#include <iostream>
#include <math.h>
using namespace std;
long int prime(long int n){
if(n>2){
for(long int i=2;i<=sqrt(n);i++){
if(n%i==0)
return false;
}
}
return true;
}
int main(){
long int l,k,c;
long int d;
long int a[d];
long int b[k];
cin>>k;
for(l=1;l<=k;l++){
for(d=2;d<=pow(10,13);d++){
   a[d]=d;
if(prime(a[d]))
b[l]=a[d];
}
}
for(c=2;c<pow(10,5);c++){
b[k]=b[k]+c;
for(l=1;l<=k;l++){
if(b[k]%a[l]==0)
break;
if(!prime(b[k])){
cout<<b[k];
break;
}
}
}
return 0;
}
Modificat de Moderator: Foloseste tag-ul [ code ] ... [ / code ] atunci cand scrii cod sursa
Cum o pot remedia?


Titlul: Răspuns: Unde am gresit
Scris de: Simoiu Robert din Iulie 19, 2010, 11:46:26
In primul rand nu e solutia optima, citeste mai multe despre Ciurul lui Eratosthenes (http://infoarena.ro/ciurul-lui-eratostene), si in al doilea rand cred ca ti se trage de la functia pow, rezultatul fiind foarte mare nu poate fi retinut pe nici un tip de date cunoscut .
[LE] Cred ca ti se trage de la long int a[d] si b[k], intre paranteze trebuie sa pui o constanta, nu o variabila, si sa fie cat se poate de mare, ca sa depaseasca cel mai mare numar posibil. Spre exemplu, daca ai 1 <= N <= 100, si spune sa se citeste un vector V de N elemente, vector o sa-l declari asa :
Cod:
int V[105]
De ce 105 ? Pentru ca nu se declara niciodata la limita, deoarece pot aparea unele "erori", sau neatentii din partea programatorului. Elementele din vector sunt indexate de la 0 la 104, deci daca as fi pus V[100] ar fi fost pana la 99, si daca as fi apelat V[100] as fi primit acea eroare, care reprezinta un stack overflow, adica accesarea unui element neexistent dintr-un vector.

 


Titlul: Răspuns: Unde am gresit
Scris de: Pripoae Teodor Anton din Iulie 19, 2010, 23:57:24
Problema are deja un topic (http://infoarena.ro/forum/index.php?topic=84.0). Te rog posteaza acolo.