无平方因子的数
题目:(题目跟分析基本都是书上,我只是敲几个代码跟大家分享)
无平方因子的数。 给出正整数n,m。区间[n,m]内 “无平方因子” 的数有多少个??
整数p无平方因子,当且仅当不存在k>1,使得p是k^2的倍数. 1<=n<=m<=10^12; n-n<=10^7
解析:
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1e7+100;
int vis[N];
int prime[N];
int mark[N];
int main()
{
ll n,m;
cin>>n>>m;
int index=0;
int k=sqrt(m+0.5);
for(int i=2;i<=k;i++)
{
if(!vis[i]) prime[index++]=i;
for(int j=0;j<index&&prime[j]*i<=k;j++)
{
vis[i*prime[j]]=1;
if(i%prime[j]==0) break;
}
}
for(int i=0;i<index;i++)
{
for(int j=prime[i]*prime[i];j<=m;j+=prime[i]*prime[i])
{
if(j>=n)
{
mark[j-n]=1;
}
}
}
int ans=0;
for(int i=n;i<=m;i++)
if(!mark[i-n]){ ans++;cout<<i<<' ';}
cout<<endl;
cout<<ans<<endl;
return 0;
}