Total Submit: 539 Accepted: 113 Special Judge: No
以下每组数据一行,每行两个数m,n(0<=m, n<=50000)
1 1
2 3
5
#include<iostream>
#include<algorithm>
#include<set>
#include<vector>
using namespace std;
int N,M;
int Ans;
vector<int> F;
void Dfs(int Step,int Frac,int Tot)
{
if(Step >= F.size())
{
if(Tot&1)
Ans -= (long long)(M/Frac);
else
Ans += (long long)(M/Frac);
return;
}
Dfs(Step+1,Frac*F[Step],Tot+1);
Dfs(Step+1,Frac,Tot);
}
void Count(int Num)
{
int Cur = Num;
F.clear();
for(int i=2;i*i<=Num;i++)
if(Cur%i == 0)
{
F.push_back(i);
while(Cur%i == 0)
Cur /= i;
}
if(Cur > 1) F.push_back(Cur);
Dfs(0,1,0);
}
int main()
{
int n ;
cin >> n ;
while(n>0)
{
Ans = 0;
cin >>M>>N;
for(int i=1;i<=N;i++)
Count(i);
cout<<Ans<<'\n';
n -- ;
}
}