Cod sursa(job #1724416)

Utilizator daniel.grosuDaniel Grosu daniel.grosu Data 3 iulie 2016 01:34:22
Problema Pascal Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include<bits/stdc++.h>
using namespace std;
int A2[5000055];
int A3[5000055];
int A5[5000055];
int rs,d,r;
int main(){
   	ifstream cin("pascal.in");
    ofstream cout("pascal.out");
   	
   	cin>>r>>d;
   	for(int i=2; i*2<=r+5; i*=2)
   		for(int j=i; j<=r+5; j+=i)
   			A2[j]++;
   	for(int i=3; i*3<=r+5; i*=3)
   		for(int j=i; j<=r+5; j+=i)
   			A3[j]++;
   	for(int i=5; i*5<=r+5; i*=5)
   		for(int j=i; j<=r+5; j+=i)
   			A5[j]++;
   	for(int i=1; i<=r; ++i)
   	{
   		A2[i]=A2[i-1]+A2[i];
   		A3[i]=A3[i-1]+A3[i];
   		A5[i]=A5[i-1]+A5[i];
   	}
	
	for(int i=1; i<=r-1; ++i)
	{
	int s; 	
		if(d==2) s=A2[r]-(A2[i]+A2[r-i])-1;
		if(d==3) s=A3[r]-(A3[i]+A3[r-i])-1;
		if(d==4) s=A2[r]-(A2[i]+A2[r-i])-2;
		if(d==5) s=A5[r]-(A5[i]+A5[r-i])-1;
		if(d==6) s=min(A2[r]-(A2[i]+A2[r-i])-1, A3[r]-(A3[i]+A3[r-i])-1); 	
		if(s>=0)
			rs++;
	}
	cout<<rs<<"\n";
   	
    return 0;
}