Cod sursa(job #2447695)

Utilizator robert.barbu27robert barbu robert.barbu27 Data 14 august 2019 12:20:34
Problema Puteri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <bits/stdc++.h>
using namespace std;
ifstream f("puteri.in");
ofstream g("puteri.out");
bool prim[129];
int n,a[100005],b[100005],c[100005],bit[129],l[129],s[65][65][65];
long long sol;
inline long long solve(int mod)
{
    int x,y,z;
    long long sol=0;
    memset(s,0,sizeof s);
    for(int i=0; i<=128; i++)
        l[i]=i%mod;
    for(int i=0; i<n; ++i)
    {
        x=l[mod-l[a[i]]];
        y=l[mod-l[b[i]]];
        z=l[mod-l[c[i]]];
        if(x<=64&&y<=64&&z<=64)
            sol+=s[x][y][z];
        s[l[a[i]]][l[b[i]]][l[c[i]]]++;
    }
    return sol;
}
int main()
{
    freopen("puteri.in","r",stdin);
    freopen("puteri.out","w",stdout);
    scanf("%d",&n);
    for(int i=0; i<n; i++)
        scanf("%d %d %d",&a[i],&b[i],&c[i]);
    for(int i=2; i<=128; i++)
        bit[i]=1;
    for(int i=2; i<=128; i++)
    {
        if(!prim[i])
        {
            for(int j=i; j<=128; j+=i)
            {
                bit[j]*=-1;
                prim[j]=1;
            }
            for(int j=i*i; j<=128; j+=i*i)
                bit[j]=0;
        }
        if(bit[i]!=0)
            sol-=bit[i]*solve(i);
    }
    printf("%lld\n",sol);
    return 0;
}