Cod sursa(job #2780337)

Utilizator BlueLuca888Girbovan Robert Luca BlueLuca888 Data 6 octombrie 2021 19:52:44
Problema Fractii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.33 kb
#include <bits/stdc++.h>
#define io_file(name) std::ifstream fin(name".in"); std::ofstream fout(name".out");
#define MAXN 1000000

using namespace std;

io_file("data")

bitset <MAXN+5> f;
int prime, p[MAXN/10];

int cnt, d[20], put, par, prd;
int n, x, sol;

int main (){
    f[0]=f[1]=1;
    for(int i=4; i<=MAXN; i+=2)
        f[i]=1;
    for(int i=3; i<=MAXN/i; i+=2)
        if(f[i] == 0)
            for(int j=i*i; j<=MAXN; j+=i)
                f[j]=1;
    p[++prime]=2;
    for(int i=3; i<=MAXN; i+=2)
        if(f[i] == 0)
            p[++prime]=i;


    fin>>n;
    for(int i=2; i<=n; i++){
        x=i; cnt=0;
        for(int j=1; p[j]<=x/p[j] && j <= prime; j++){
            put=0;
            while(x%p[j] == 0){
                put++;
                x/=p[j];
            }
            if(put != 0)
                d[cnt++]=p[j];
        }
        if(x != 1)
            d[cnt++]=x;

        for(int j=1; j<(1 << cnt); j++){
            par=0;
            prd=1;
            for(int jj=0; jj<cnt; jj++)
                if(((j>>jj)&1) == 1){
                    prd*=d[jj];
                    par=1-par;
                }
            if(par == 0)
                sol -= n/prd;
            else
                sol += n/prd;
        }
    }
    fout<<1LL*n*n-sol;
    return 0;
}