Pagini recente » Cod sursa (job #1000217) | Cod sursa (job #2639734) | Istoria paginii runda/simulareoji2martie/clasament | Cod sursa (job #1971215) | Cod sursa (job #997971)
Cod sursa(job #997971)
#include<fstream>
//#include <windows.h>
#include <string.h>
using namespace std;
void realoca(int *&v,int nr)
{
int *v2 = new int[nr+1];
memcpy(v2,v,nr*sizeof(int));
v2[nr] = 0;
delete[] v;
v = v2;
}
void calcDivizori(int nr,int *& divizori)
{
int div = 0;
for (int i=2;i<=nr;++i)
{
if(nr%i==0)
divizori[div++]=i;
}
//realoca(divizori,div);
}
void calcMultipli(int nr,int n,int *&multipli)
{
int mul = 0;
for (int i=n;i>nr;--i)
{
if(i%nr==0)
multipli[mul++]=i;
}
//realoca(multipli,mul);
}
int **alocaMatrice(int n,int m)
{
int **matrice = new int *[n];
for(int i=0;i<n;++i)
{
matrice[i] = new int[m];
//memset(matrice[i],0,sizeof(int)*m);
}
return matrice;
}
void dealocaMatrice(int **matrice,int n)
{
for(int i=0;i<n;++i)
delete []matrice[i];
delete[] matrice;
}
bool xEInVector(int x,int * vector, int n)
{
for (int i=0;i<n && vector[i];++i)
{
if (x==vector[i])
{
return true;
}
}
return false;
}
bool vectorContineElDinVector(int *v1,int *v2,int n)
{
for(int j =0;j<n&&v1[j];j++)
{
for (int i=0;i<n && v2[i];++i)
{
if(v2[i] == v1[j])
return true;
}
}
return false;
}
int main()
{
ifstream fin("fractii.in");
ofstream fout("fractii.out");
int n=0;
fin>>n;
if(n)
{
int ** divizori = alocaMatrice(n-1,n-1);
for (int i=2;i<=n;++i)
{
calcDivizori(i,divizori[i-2]);
}
int ** multipli = alocaMatrice(n-1,n-1);
for (int i=2;i<=n;++i)
{
calcMultipli(i,n,multipli[i-2]);
}
//char msg[1000];
int scadeNr = 0;
for(int i=2;i<=n;++i)
{
for (int j=0;j<n-1;++j)
{
if(i==n && j==n-2)
continue;
if (xEInVector(i,divizori[j],n) || xEInVector(i,multipli[j],n) || vectorContineElDinVector(divizori[j],divizori[i-2],n) /*|| vectorContineElDinVector(multipli[j],multipli[i-2],n)*/)
{
// sprintf(msg,"\r\nAm scos pentru %d si %d\r\n",i,j+2);
//OutputDebugStringA(msg);
scadeNr++;
}
}
}
int total = (n * n) - scadeNr -1;
fout<<total;
fin.close();
fout.close();
dealocaMatrice(divizori,n-1);
dealocaMatrice(multipli,n-1);
}
return 0;
}