Cod sursa(job #935538)

Utilizator dariusdariusMarian Darius dariusdarius Data 3 aprilie 2013 20:51:23
Problema Mins Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.64 kb
#include<stdio.h>
#include<algorithm>
using namespace std;
typedef long long i64;
int phi[1000005];
void phi_ciur(int n)
{
	for(int i=1;i<=n;i++)
		phi[i]=i;
	for(int i=2;i<=n;i++)
		if(phi[i]==i)
			for(int j=i;j<=n;j+=i)
				phi[j]=phi[j]/i*(i-1);
	for(int i=2;i<=n;i++)
		phi[i]+=phi[i-1];
}
i64 solve(int x,int y)
{
	if(x>y) swap(x,y);
	if(x==y) return 2*phi[x]-1;
	if(x==0) return 0;
	return (2*phi[x]-1)*(y/x)+solve(x,y%x);
}
int main()
{
	freopen("mins.in","r",stdin);
	freopen("mins.out","w",stdout);
	int N,M;
	scanf("%d%d",&N,&M);N--;M--;
	phi_ciur(max(N,M));
	fprintf(stderr,"%lld\n",solve(2,2));
	printf("%lld\n",solve(N,M));
	return 0;
}