Pagini recente » Cod sursa (job #2489090) | Cod sursa (job #1755674) | Cod sursa (job #562) | Cod sursa (job #1697517) | Cod sursa (job #935532)
Cod sursa(job #935532)
#include<stdio.h>
#include<algorithm>
#include<vector>
using namespace std;
int p[10];
vector<int> dp[1000005];
long long pinex(int x,int y)
{
///numarul de numere <=x si prime cu y:
int ans=x,q,nr;
for(int i=1;i<(1<<(int)dp[y].size());i++)
{
nr=0;q=1;
for(int j=0;j<(int)dp[y].size();j++)
if(i&(1<<j))
nr++,q*=dp[y][j];
if(nr&1) ans-=x/q;
else ans+=x/q;
}
return ans;
}
int main()
{
freopen("mins.in","r",stdin);
freopen("mins.out","w",stdout);
int n,m;long long ans=0;
scanf("%d%d",&n,&m);
for(int i=2;i<n;i+=2)
dp[i].push_back(2);
for(int i=3;i<n;i+=2)
if(dp[i].empty())
for(int j=i;j<n;j=j+i)
dp[j].push_back(i);
/*
for(int i=2;i<n;i++)
{
for(int j=0;j<(int)dp[i].size();j++)
fprintf(stderr,"%d ",dp[i][j]);
fprintf(stderr,"\n");
}
*/
for(int i=1;i<n;i++)
ans+=pinex(m-1,i);
printf("%lld\n",ans);
return 0;
}