Cod sursa(job #3304994)

Utilizator lucaje123Vartolomei Luca lucaje123 Data 29 iulie 2025 12:11:58
Problema Mins Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.39 kb
#include <fstream>
#include <vector>
#include <string.h>
using namespace std;

ifstream cin("mins.in");
ofstream cout("mins.out");

int lin, col;
int ciur[1005];
vector<int> primes;

void generare_ciur(){
    for(int i=2;i<=1000;i++){
        ciur[i]=true;
    }
    for(int i=2;i<=1000;i++){
        if(ciur[i]==true){
            for(int j=2*i;j<=1000;j+=i){
                ciur[j]=false;
            }
            primes.push_back(i);
        }
    }
}

long long pinex(long long A, long long B){
    vector<long long> fact;
    int d=0;
    while(d<primes.size()&&primes[d]*primes[d]<=A){
        if(A%primes[d]==0){
            fact.push_back(primes[d]);
            while(A%primes[d]==0){
                A=A/primes[d];
            }
        }
        d++;
    }
    if(A>1){
        fact.push_back(A);
    }
    int k=fact.size();
    long long ans=B;
    for(int mask=1;mask<(1<<k);mask++){
        long long p=1;
        int cnt=0;
        for(int i=0;i<k;i++){
            if(mask&(1<<i)){
                p=p*fact[i];
                cnt++;
            }
        }
        if(cnt%2==0){
            ans+=B/p;
        }
        else{
            ans-=B/p;
        }
    }
    return ans;
}

int main(){
    generare_ciur();
    cin>>lin>>col;
    long long ans=0;
    for(int i=1;i<lin;i++){
        ans+=pinex(i, col-1);
    }
    cout<<ans;
}