Cod sursa(job #2418773)

Utilizator mirceamaierean41Mircea Maierean mirceamaierean41 Data 6 mai 2019 12:36:10
Problema Fractii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <fstream>
#include <cmath>
using namespace std;
unsigned long long diviz(unsigned long long n)
{
    for(int i=2; i<=sqrt(n); ++i)
        if(n%i==0) return i;
    return 1;
}
unsigned long long rl(unsigned long long n,unsigned long long p)
{
    unsigned long long nr=1;
    while(p>0)
    {
        if(p%21)
        {
            nr*=n;
            --p;
        }
        else
        {
            n*=n;
            p/=2;
        }
    }
    return nr;
}
ifstream cin("fractii.in");
ofstream cout("fractii.out");
int main()
{
    unsigned long long i,nd,k,p,eul;
    cin>>n;
    unsigned long long cnt=1;
    for(i=2; i<=n; ++i)
    {
        d=diviz(i);
        k=i;p=0;
        eul=1;
        if(d==1) eul=i-1;
        else
        {
            while(k>1)
            {
                p=0;
                while(k%d==0)
                {
                    ++p;
                    k/=d;
                }
                if(p) eul*=(d-1)*rl(d,p-1);
                d=diviz(k);
                if(d==1) d=k;
            }
        }
        cnt+=2*eul;
    }
    cout<<cnt;
    return 0;
}