Cod sursa(job #920274)

Utilizator apopeid13Apopeid Alejandro apopeid13 Data 20 martie 2013 10:02:39
Problema Puteri Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.56 kb
#include <cstdio> 
#define nmax 100010 
  
int n, a[nmax], b[nmax], c[nmax], v[66][66][66], g[66]; 
long long sol; 
  
int main() 
{ 
    freopen("puteri.in","r",stdin); 
    freopen("puteri.out","w",stdout); 
    scanf("%d",&n); 
    int i, k, ck, t, f, d, x, y, z; 
    long long s; 
    for (i=1; i<=n; i++)  
        scanf("%d %d %d",&a[i],&b[i],&c[i]); 
    for (k=2; k<=128; k++) 
    { 
        ck=k; 
        t=0; 
        for (d=2; d*d<=k; d++) 
        { 
            f=0; 
            while (!(ck%d)) 
            { 
                f++; 
                ck/=d; 
            } 
            if (f>1)  
            { 
                t=-1; 
                break; 
            } else 
                if (f==1) t++; 
        } 
        if (ck>1 && t>-1) t++; 
        if (t>-1) 
        { 
            s=0; 
            for (x=0; x<=64; x++) 
                for (y=0; y<=64; y++) 
                    for (z=0; z<=64; z++) v[x][y][z]=0; 
            for (i=1; i<=64; i++) g[i]=i%k; 
            for (i=1; i<=n; i++) 
            { 
                x=(k-g[a[i]]); 
                if (x==k) x=0; 
                y=(k-g[b[i]]); 
                if (y==k) y=0; 
                z=(k-g[c[i]]); 
                if (z==k) z=0; 
                if (x<=64 && y<=64 && z<=64) 
                    s+=v[x][y][z]; 
                x=g[a[i]]; 
                y=g[b[i]]; 
                z=g[c[i]]; 
                v[x][y][z]++; 
            } 
            if (t%2) sol+=s; else sol-=s; 
        } 
    } 
    printf("%lld\n",sol); 
}