Pagini recente » Cod sursa (job #3136912) | Cod sursa (job #2488036) | Cod sursa (job #1785058) | Cod sursa (job #236969) | Cod sursa (job #2493979)
#include <fstream>
using namespace std;
ifstream in("mins.in");
ofstream out("mins.out");
const int NMAX=1000000;
char mo[NMAX+5];
bool ciur[NMAX+5];
int ans[NMAX+5];
void Ciur(int n)
{
ciur[1]=ciur[0]=1;
for(int i=2;i*i<=n;i++)
if(ciur[i]==0)
for(int j=i*i;j<=n;j+=i)
ciur[j]=1;
}
void miu(int n)
{
for(int i=1;i<=1000000;i++)
mo[i]=-1;
for(int i=2;i*i<=n;i++)
for(int j=i*i;j<=n;j+=i*i)
mo[j]=0;
for(int i=2;i<=n;i++)
if(ciur[i]==0)
for(int j=i;j<=n;j+=i)
mo[j]=(-1)*mo[j];
}
int main()
{
int n,m;
long long rez(0);
in>>n>>m;
n--;m--;
Ciur(n);
miu(n);
for(int i=2;i<=n;i++)
for(int j=2;j<=n;j+=i)
ans[j]+=mo[i]*(m/i);
//for(int i=1;i<=n;i++)
// rez=(long long)(rez+ans[i]);
for(int i=2;i<=n;i++)
rez+=(long long)((n/i)*(m/i))*mo[i];
out<<(long long)n*m-rez<<'\n';
return 0;
}