原题
多多有一些正整数n,n+1,n+2,...m,如 n=3,m=9 时,多多有3,4,5,6,7,8,9 七个数。
多多不喜欢平方因子,如 4,9,16,25 都是平方因子,而1不算平方因子,多多想知道他的这些数当中有多少数中不包含平方因子?在 3~9 这些数中包含平方因子的数有4,8,9 三个数,不包含平方因子的数是 3,5,6,7 四个数。
输入格式:
输入一行,两个数n,m(1<=n,m<=1000000)
输出格式:
输出一个整数表示答案。
输入样例:
1 10
1 10
输出样例:
7
7
题目讲解
首先,我们发现这堆数的数量是b-a+1(在这里要不要abs应该都差不多的,以防万一)。
然后,我们首先要排除掉平方数,再去把平方因子排除。
就这么简单
所以代码是
#include<bits/stdc++.h>
using namespace std;
long long m,n,a[1000005],b[1000005],x,y,z;
int main(){
scanf("%lld%lld",&n,&m);
if(n>m)
swap(n,m);
for(int i=2;i*i<=m;i++)
{
if(a[i]==0)
{
for(int j=i*i;j<=m;j+=i*i)
a[j]=1;
}
}
for(int i=n;i<=m;i++)
if(a[i]==0)x++;
printf("%lld",x);
return 0;
}
没登录的朋友看下面
#include<bits/stdc++.h>
using namespace std;
long long m,n,a[1000005],b[1000005],x,y,z;
int main(){
scanf("%lld%lld",&n,&m);
if(n>m)
swap(n,m);
for(int i=2;i*i<=m;i++)
{
if(a[i]==0)
{
for(int j=i*i;j<=m;j+=i*i)
a[j]=1;
}
}
for(int i=n;i<=m;i++)
if(a[i]==0)x++;
printf("%lld",x);
return 0;
}
实在不行的下个华为中转站拖过去就行了
一键三连
点个关注再走吧