Cod sursa(job #1375408)

Utilizator retrogradLucian Bicsi retrograd Data 5 martie 2015 13:11:42
Problema Mins Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include<fstream>
#include<vector>

using namespace std;
typedef int var;

ifstream fin("mins.in");
ofstream fout("mins.out");

var DIV[10];
var nrdiv;
vector<var> D[1000002];


void ciur(var MAX) {
    for(var i=2; i*i<=MAX; i++) {
        if(D[i].empty()) {
            for(var j=i; j<=MAX; j+=i) {
                D[j].push_back(i);
            }
        }
    }
}


//nr de numere <= a prime cu b
var cnt(var a, var b) {
    var sgn = -1;

    vector<var> &DIV = D[b];
    if(DIV.empty()) {
        DIV.push_back(b);
    }
    var nrd = DIV.size();
    var total = 0;

    for(var conf=1; conf<(1<<nrd); conf++) {
        var prod = 1;
        sgn = -1;
        for(var i=0; i<nrd; i++) {
            if(conf & (1<<i)) {
                sgn = -sgn;
                prod *= DIV[i];
            }
        }
        total += sgn*a/prod;
    }
    return a-total;
}



int main() {
    var c, d;
    fin>>c>>d;
    ciur(c+1);

    //fout<<cnt(10, 15)<<'\n';
    int64_t sum =0;
    for(var i=1; i<c; i++) {
        sum += 1LL * cnt(d-1, i);
    }
    fout<<sum;
}