洛谷:P1621 集合(素数相关)

题目:

在这里插入图片描述

分析:虽然我第一次想就想到了,而且和题解差不多,但是在写代码过程中,漏洞百出,体现出自己错误+垃圾的代码水平。

代码:

#include<bits/stdc++.h>
using namespace std;
int A[100005];
int main()
{
 memset(A,-1,sizeof(A));
 for(int i=2;i<=100001;i++)
 {
  if(A[i]!=-1) continue;
  for(int j=2;j*i<=100004;j++)
  {
   A[j*i]=1;
  }
 }
 //-1  质数       1   非质数 
 int a,b,c;
 cin>>a>>b>>c;
 int B[100005];
 memset(B,0,sizeof(B));
 int minn=1;
 int ans=1;
 for(int i=c;i<=b;i++)
 {
  if(A[i]==-1)
  {
   if(minn*i>b) {
    //ans++;
    int j=1;
    for(;j*i<=b;j++) 
    {
     B[j*i]=1;  //cout<<j*i<<endl;
    }
    if(j>2||i>=a) ans++;
    continue;
   } 
   if(minn==1) 
   {
    minn=i;
   }
   for(int j=1;j*i<=b;j++) B[j*i]=1;
  }
 }
 //cout<<ans<<endl;
 for(int i=a;i<=b;i++) if(B[i]==0) ans++;
 cout<<ans;
}

猜你喜欢

转载自blog.csdn.net/weixin_42721412/article/details/108288096