Cod sursa(job #1038713)

Utilizator thesilverhand13FII Florea Toma Eduard thesilverhand13 Data 21 noiembrie 2013 21:50:26
Problema Dtcsu Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.78 kb
#include <algorithm>
#include <fstream>
#include <cstdio>
using namespace std;
 
typedef long long Int;
const int n = 276997;
long long nq;
int sol;
 
const int buffer_size = 1024 * 512;
char buff[buffer_size];
 
inline bool is_digit(const char &ch)
{
    if ('0' <= ch && ch <= '9')
    {
        return true;
    }
    return false;
}

static int i = buffer_size;

inline void next_long_long(long long &number)
{
    if (i == buffer_size)
    {
        fread(buff, buffer_size, 1, stdin);
        i = 0;
    }
     
    while (!is_digit(buff[i]))
    {
        if (++i == buffer_size)
        {
            fread(buff, buffer_size, 1, stdin);
            i = 0;
        }
    }
     
    while (is_digit(buff[i]))
    {
        number = number * 10LL + buff[i] - '0';
        if (++i == buffer_size)
        {
            fread(buff, buffer_size, 1, stdin);
            i = 0;
        }
    }
}

inline void skip()
{
	if (i == buffer_size)
    {
        fread(buff, buffer_size, 1, stdin);
        i = 0;
    }
     
    while (buff[i] != '\n')
    {
        if (++i == buffer_size)
        {
            fread(buff, buffer_size, 1, stdin);
			i = 0;
        }
    }
    
    if (++i == buffer_size)
    {
        fread(buff, buffer_size, 1, stdin);
        i = 0;
	}
}

const long long list[] = {0, 2, 3, 5, 7, 11};
inline bool take(long long number)
{
	for (int i = 1; i <= 5; ++i)
	{
		while (number % list[i] == 0)
		{
			number = number / list[i];
		}
	}
	return (number == 1);
}

int main()
{
    freopen("dtcsu.in", "r", stdin);
     
    for (int i = 1; i <= n; ++i)
    {
        skip();
    }
     
    next_long_long(nq);
    for (int i = 1; i <= nq; ++i)
    {
        Int foo = 0;
        next_long_long(foo);
        sol = sol + take(foo);
    }
     
    ofstream fout("dtcsu.out");
    fout << sol << '\n';
}