Informatică, întrebare adresată de MadalinaMadutaa, 9 ani în urmă

Cum as putea sa transform urmatoarea problema sunb forma de functie?
Multumesc.
Problema:
Să se scrie un program care citește două numere naturale a și b și determină câte numere prime sunt în intervalul închis determinat de a și b.
==========================================
Rezolvarea:(este buna, dar vreau sa mi-o transformati sub forma de functie)
#include
using namespace std;
int main() {
int a , b;
cin >> a >> b;
if(a>b) {
int aux = a;
a = b;
b = aux;
}
int ct = 0;
for(int i = x ; i <= y; i++){
int prim = 1;
if(i<2) prim=0;
if(i % 2 == 0 && i != 2) prim=0;
for(int d = 3; d * d <= i ; d ++)
if(i % d == 0) prim=0;
if(prim == 1)
ct++;
}
cout << ct;
return 0;
}

==========================================


MadalinaMadutaa: #include <iostream>
using namespace std;
int prim (int);
int main() {
int a , b;
cin >> a >> b;
if(x>y) {
int aux = a;
a = b;
b = aux;
}
int ct = 0;
for(int i = a ; i <= b; a++){
ct++;
}
cout << ct;
return 0;
}
MadalinaMadutaa: #include <iostream>
using namespace std;
int main() {
int x , y;
cin >> x >> y;
if(x>y) {
int aux = x;
x = y;
y = aux;
}
int ct = 0;
for(int i = x ; i <= y; i++){
int prim = 1;
if(i<2) prim=0;
if(i % 2 == 0 && i != 2) prim=0;
for(int d = 3; d * d <= i ; d ++)
if(i % d == 0) prim=0;
if(prim == 1)
ct++;
}
cout << ct;
return 0;
}
MadalinaMadutaa: asta e problema rezolvata
Dropbox: Ce fel de functie?

Răspunsuri la întrebare

Răspuns de pigwimgs
1
#include <iostream>

using namespace std;
int aux,i,prim,d,ct,x,y;
void functie (int x,int y) {
if(x>y) {
int aux = x;
x = y;
y = aux;
}
int ct = 0;
for(int i = x ; i <= y; i++){
int prim = 1;
if(i<2) prim=0;
if(i % 2 == 0 && i != 2) prim=0;
for(int d = 3; d * d <= i ; d ++)
if(i % d == 0) prim=0;
if(prim == 1)
ct++;
}
cout << ct;
}
int main()
{
    cin>>x>>y;
    functie(x,y);
}



MadalinaMadutaa: *e
MadalinaMadutaa: Dar funcția prin nu e buna
MadalinaMadutaa: Eu am invatat asa:
pigwimgs: pei miscsorez timpul de parcurgere daca nu a gasit un divizor pana la mijlocul unui numar nu va gasi nici dupa
MadalinaMadutaa: int prim(int x) {
int i;
if(x>2) return 0;
if(x%2==0 && x!=2) return 0;
for(int d=3;d*d<=x;d+=2)
if(x%d==0) return 0;
return 1;
}
pigwimgs: pei la x>2 daca un numar e mai mare decat 2 nu mai e prim??
MadalinaMadutaa: Scuzee
MadalinaMadutaa: Era if(x <2) return 0;
pigwimgs: da atunci e ok algoritmul tau e mai rapid decat ce am facut eu dar e perfect corect simplu e il folosesc pe asta ca mi se pare mai simplu
MadalinaMadutaa: Bine. Eu doar pe asta l am învătat
Răspuns de Dropbox
1
Uite aici o sursa, am facut 2 functii, una pentru verificarea unui numar daca e prim si una pentru cate numere sunt prime in intervalul [a,b].

#include <bits/stdc++.h>
using namespace std;
int Prim(int n){    if(n == 0 || n == 1) return 0;    else    {        int d;        for(d = 2; d <= sqrt(n); d++)            if(n % d == 0) return 0;        return 1;    }}
int Numere(int a, int b){    int i, contor = 0;    for(i = a; i <= b; i++)    {        int x = Prim(i);        if(x == 1) contor++;    }    return contor;}
int a, b;
int main(){    cin >> a >> b;    cout << Numere(a, b);    return 0;}

Dropbox: pentru cate*.
Dropbox: Sper ca ai inteles.
Alte întrebări interesante