Cod sursa(job #3204565)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 17 februarie 2024 07:10:51
Problema Fractii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.73 kb
#include<bits/stdc++.h>
using namespace std;
ifstream F("fractii.in");
ofstream G("fractii.out");
int n,i,j,k,a[78498],c[1000001];
long long s=1;
bitset<1000001> b;
int main()
{
    for(F>>n,c[1]=c[2]=1,i=3;i*i<=n;i+=2)
        if(!b[i])
            for(j=i*i;j<=n;b[j]=1,j+=2*i);
    if(n>1)
        s+=2;
    for(i=3;i<=n;i+=2)
        if(!b[i])
            s+=2*(i-1),c[i]=i-1,a[k++]=i;
    for(i=4;i<=n;++i)
        if(!c[i]) {
            if(i&1) {
                for(j=0;a[j]*a[j]<=i&&i%a[j];++j);
                for(c[i]=a[j]-1,k=i/a[j];k%a[j]==0;k/=a[j],c[i]*=a[j]);
                c[i]*=c[k],s+=2*c[i];
            } else
                c[i]=(i>>1)&1?c[i>>1]:2*c[i>>1],s+=2*c[i];
        }
    return G<<s,0;
}