Cod sursa(job #2282824)

Utilizator raduandreicaRadu Andreica raduandreica Data 14 noiembrie 2018 15:48:31
Problema Frac Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.71 kb
#include <iostream>
#include <fstream>
using namespace std;
int gcd(int a, int b)
{
 	if (a==0) return b;
 	return gcd(b%a, a);
}
int main()
{
    ifstream fin("frac.in"); ofstream fout("frac.out");
    long long n,i,j=0,k,l,Euler,m,p,q,u[12],a=0;
    fin>>n;fin>>m; if(n==1) fout<<m;
    else {
    Euler=n;k=n;
    for(i=2;n>1;i++) {if((n/i)*i==n) {while((n/i)*i==n) n=n/i; u[j]=i;j++;}}
    for(i=0;i<j;i++) Euler=(Euler/u[i])*(u[i]-1);
    p=m%Euler;q=m/Euler; i=0;l=1;
    if(p>Euler/2) {p=Euler-p;a=1;}
    while((i<k)&&(l<=p)){
        i++;n=0;
        for(m=0;m<j;m++) {if((i/u[m])*u[m]==i) {n=1;break;}}
        if(n==0) l++;
    }
    if(a==1) i=k-i;
    fout<<(q*k+i);
}
    return 0;
}