Cod sursa(job #164381)

Utilizator DorinOltean Dorin Dorin Data 24 martie 2008 09:07:46
Problema Pascal Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.42 kb
#include <vector>
#include <list>
#include <map>
#include <set>
#include <deque>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <ctime>

using namespace std;

int n,d;

long int i,nr,j,k,res;
long int t[5000001];
long int doi[5000001];
long int cinci[5000001];

int main()
{
    freopen("pascal.in","r",stdin);
    freopen("pascal.out","w",stdout);
    
    scanf("%d%d",&n,&d);

	nr= 3;
	j = 1;
	while(nr <= n)
	{
		for(i=nr;i<=n;i+=nr)
			t[i]++;
		nr*=3;	
	}
	
	for(i=1;i<=n;i++)
		t[i] += t[i-1];
	
	nr= 5;
	j = 1;
	while(nr <= n)
	{
		for(i=nr;i<=n;i+=nr)
			cinci[i]++;
		nr*=5;
	}
	
	for(i=1;i<=n;i++)
		cinci[i] += cinci[i-1];
		
	nr= 2;
	j = 1;
	while(nr <= n)
	{
		for(i=nr;i<=n;i+=nr)
			doi[i]++;
		nr*=2;	
	}
	
	for(i=1;i<=n;i++)
		doi[i] += doi[i-1];
			
	for(k=1;k<n;k++)
	{		
		switch(d)
		{
			case 2:if(doi[n] - doi[n-k] > doi[k])
				res++; break;
			case 3:if(t[n] - t[n-k] > t[k])
				res++; break;
			case 4:if(doi[n] - doi[n-k] > doi[k] + 1)
				res++; break;
			case 5:if(cinci[n] - cinci[n-k] > cinci[k])
				res++; break;
			case 6:if(t[n] - t[n-k] > t[k] && doi[n] - doi[n-k] > doi[k])
				res++; break;
		}
	}
	printf("%ld\n",res);
	
	return 0;
}