Cod sursa(job #3263320)

Utilizator vladsoartavlad sofronea vladsoarta Data 14 decembrie 2024 10:38:54
Problema Puteri Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.34 kb
#include <fstream>
#include <cstring>
using namespace std;
ifstream cin("puteri.in");
ofstream cout("puteri.out");

struct nr
{
    int a2,b3,c5;
} num[100001];

int n,a,b,c;

int numereprimediv(int nr)
{
    int d=2,divprimi=0;
    while(nr>1)
    {
        bool op=0;
        while(nr%d == 0)
            nr/=d,op=1;

        if(op)
            divprimi++;

        d++;
        if(d*d > nr)
            d=nr;
    }

    return divprimi;
}
int elems[65][65][65],m[134];

int solve(int mod)
{

    int new2,new3,new5;
    int comb=0;
    memset(elems,0,sizeof(elems));
    for(int i=0; i<=128; i++)
        m[i] = i%mod;

    for(int i=1; i<=n; i++)
    {
        new2 = m[mod - m[num[i].a2]];
        new3 = m[mod - m[num[i].b3]];
        new5 = m[mod - m[num[i].c5]];

        if(new2<=64 && new3<=64&&new5<=64)
            comb += elems[new2][new3][new5];
        elems[m[num[i].a2]][m[num[i].b3]][m[num[i].c5]]++;
    }
    return comb;
}

int main()
{
    int rsp=0;
    cin>>n;
    for(int i=1; i<=n; i++)
    {
        int a2,b3,c5;
        cin>>a2>>b3>>c5;
        num[i]= {a2,b3,c5};
    }

    for(int put=2; put<=128; put++)
    {
        if(numereprimediv(put)%2 == 0)
            rsp-=solve(put);
        else
            rsp+=solve(put);
    }

    cout<<rsp;

    return 0;
}