编程题三参考程序代码:
#include<bits/stdc++.h>
using namespace std;
int m,n;
const int N=2e7+10;
int cnt[N],a[N],s[N];
bool t[N];
int main()
{
cin>>m>>n;
for(int i=2;i<=n/2;i++)
{
if(cnt[i]) continue;
for(int j=i*2;j<=n;j+=i)//埃筛,计算因子数量
cnt[j]++;
}
for(int i=2;i*i<=n;i++)
{
int c=i*i;
for(int j=c;j<=n;j+=c)//记录有完全平方数因子的数
t[j]=1;
}
a[1]=1;
for(int i=2;i<=n;i++)
{
if(t[i])continue; //有完全平方数因子 函数值为0
if(cnt[i]%2||cnt[i]==0)
a[i]=-1; //奇数个质因子 或者 质数 函数值-1
else
a[i]=1;
}
int ans=0;
for(int i=m;i<=n;i++)
ans+=a[i];
cout<<ans<<endl;
return 0;
}