Cod sursa(job #1560904)

Utilizator Debuger3Numarul 1 Debuger3 Data 3 ianuarie 2016 14:42:09
Problema Pascal Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.83 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

ifstream fin ("pascal.in");
ofstream fout ("pascal.out");

int main()
{
		long long int n;
		int d;
		fin >> n >> d;

		vector <long long int> exp2(n+10,0);
		vector <long long int> exp3(n+10,0);
		vector <long long int> exp5(n+10,0);
		vector <long long int> fact2(n+10,0);
		vector <long long int> fact3(n+10,0);
		vector <long long int> fact5(n+10,0);

		for ( int i = 1 ;i <= n ; i ++)
		{
				if(i % 2 == 0)
						exp2[i] = 1+ exp2[i/2];
				if (i % 3 == 0)
						exp3[i] = 1 + exp3[i/3];
				if(i % 5 == 0)
						exp5[i] = 1 + exp5[i/5];
		}

		for ( int i = 1; i <= n ;i++)
		{
				fact2[i] = fact2[i-1] + exp2[i];
				fact3[i] = fact3[i-1] + exp3[i];
				fact5[i] = fact5[i-1] + exp5[i];
		}

		if(d == 2)
		{
				long long int rezultat = 0;

				for( int i = 1; i < n ; i++)
						if(fact2[n] - fact2[i] - fact2[n-i])
								rezultat ++;
				fout << rezultat;
				fout.close();
				return 0;
		}

		if(d == 3)
		{
				long long int rezultat = 0;

				for ( int i = 1; i<n ;i++)
						if( fact3[n] -fact3[i] -fact3[n-i])
								rezultat ++;
				fout << rezultat ;
				fout.close();
				return 0;
		}

		if(d == 4)
		{
				long long int rezultat = 0;

				for ( int i =1 ; i < n; i++)
						if( (fact2[n] - fact2[i] - fact2[n-i]) >= 2)
								rezultat ++;
				fout << rezultat ;
				fout.close();
				return 0;
		}

		if( d == 5)
		{
				long long int rezultat = 0;

				for ( int i = 1 ; i < n ;i++)
						if( fact5[n] - fact5[i] -fact5[n-i])
								rezultat ++;
				fout << rezultat ;
				fout.close();
				return 0;
		}

		if(d == 6)
		{
				long long int rezultat = 0;
				
				for( int i = 1 ; i < n ;i++)
						if((fact2[n] - fact2[i] -fact2[n-i]) && (fact3[n] -fact3[i] -fact3[n-i]) )
								rezultat ++;
				fout << rezultat;
				fout.close();
				return 0;
		}
}