Cod sursa(job #2695901)

Utilizator rares404AlShaytan - Balasescu Rares rares404 Data 14 ianuarie 2021 20:13:31
Problema Pascal Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.48 kb
#include <bits/stdc++.h>
 
using namespace std;
ifstream f("pascal.in");
ofstream g("pascal.out");
char ap[5000001],ap2[5000001];
int main()
{
		int n,d;
		f >> n >> d;
		if(n <= 1)
		{
				g << 0;
				return 0;
		}
		if(d == 2 or d == 3 or d == 5)
		{
				int p = d;
				int nr = 0;
				while(p <= n)
				{
						ap[p] = ++nr;
						for(int i = p + p; i <= n; i += p)
								ap[i] = nr;
						p *= d;
				}
				long long put = 0;
				int raspuns = 0;
				for(int i = 1; i <= n; ++i)
				{
						put += ap[n - i + 1] - ap[i];
						if(put)
								raspuns++;
				}
				g << raspuns;
		}
		else if(d == 4)
		{
				int p = 2;
				int nr = 0;
				while(p <= n)
				{
						ap[p] = ++nr;
						for(int i = p + p; i <= n; i += p)
								ap[i] = nr;
						p *= 2;
				}
				long long put = 0;
				int raspuns = 0;
				for(int i = 1; i <= n; ++i)
				{
						put += ap[n - i + 1] - ap[i];
						if(put >= 2)
								raspuns++;
				}
				g << raspuns;
		}
		else
		{
				int p = 2;
				int nr = 0;
				while(p <= n)
				{
						ap[p] = ++nr;
						for(int i = p + p; i <= n; i += p)
								ap[i] = nr;
						p *= 2;
				}
				p = 3;
				nr = 0;
				while(p <= n)
				{
						ap2[p] = ++nr;
						for(int i = p + p; i <= n; i += p)
								ap2[i] = nr;
						p *= 3;
				}
				long long put = 0,put2 = 0;
				int raspuns = 0;
				for(int i = 1; i <= n; ++i)
				{
						put += ap[n - i + 1] - ap[i];
						put2 += ap2[n - i + 1] - ap2[i];
						if(put && put2)
								raspuns++;
				}
				g << raspuns;
		}
		return 0;
}