Cod sursa(job #2208989)

Utilizator oldatlantianSerban Cercelescu oldatlantian Data 1 iunie 2018 14:29:40
Problema Pascal Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <bits/stdc++.h>
using namespace std;

ifstream fi("pascal.in");
ofstream fo("pascal.out");

const int N = 2500005;

int leg[3][N], d[3];

int ant, n, dv;


int main() {
	fi >> n >> dv;

	for (int i = 2; i < N; i*= 2)
	for (int j = i; j < N; j+= i)
		leg[0][j]+= 1;

	for (int i = 3; i < N; i*= 3)
	for (int j = i; j < N; j+= i)
		leg[1][j]+= 1;

	for (int i = 5; i < N; i*= 5)
	for (int j = i; j < N; j+= i)
		leg[2][j]+= 1;

	for (int i = 0; i < 3; ++i)
	for (int j = 1; j < N; ++j)
		leg[i][j]+= leg[i][j - 1];

	if (dv % 2 == 0) 
		d[0]+= 1;
	if (dv % 3 == 0)
		d[1]+= 1;
	if (dv % 4 == 0)
		d[0]+= 1;
	if (dv % 5 == 0)
		d[2]+= 1;

	for (int st = 0, dr = n; st < dr; ++st, --dr) {
		bool flag = true;
		for (int p = 0; p < 3 && flag; ++p)
			flag&= d[p] <= (leg[p][n] - leg[p][st] - leg[p][n - st]);
		ant+= 2 * int(flag); }

	if (n % 2 == 0) {
		bool flag = true;
		for (int p = 0; p < 3 && flag; ++p)
			flag&= d[p] <= (leg[p][n] - leg[p][n / 2] - leg[p][n / 2]);
		ant+= int(flag); }

	fo << ant << endl;

	return 0; }