Cod sursa(job #997959)

Utilizator gteamG Team gteam Data 15 septembrie 2013 12:34:57
Problema Fractii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.95 kb
#include<fstream>
#include <windows.h>
using namespace std;

void calcDivizori(int nr,int * divizori)
{
	int div = 0;
	for (int i=2;i<=nr;++i)
	{
		if(nr%i==0)
			divizori[div++]=i;
	}
}

int calcMultipli(int nr,int n,int *multipli)
{
	int mul = 0;
	for (int i=n;i>nr;--i)
	{
		if(i%nr==0)
			multipli[mul++]=i;
	}
	return 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;
}