欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

牛牛的K合因子数

程序员文章站 2022-06-07 13:05:35
...

牛牛的K合因子数
牛牛的K合因子数

思路:素数求出来剩下的为合数,求K因子,只有合数才有因子4-n中求因子个数。(脑子是个好东西)

#include<iostream>
#include<cstdio>
#include<cmath>
#include<string>
#include<map>
#include<algorithm>
#include<queue>
#include<set>
using namespace std;
const int maxn = 100005;
bool isprime[maxn];
int pi[maxn];
int a[maxn];
int b[maxn];
int cnt=0;//用来计数
void Pirmes()
{
    for(int i=0;i<=100002;i++)isprime[i]=true;//先全部置为真
  
    isprime[0]=isprime[1]=false;//1 0 不是素数
  
    for(int i=2;i<=100002;i++){//从2开始往后筛
        if(isprime[i]){
            for(int j=2*i;j<=100002;j+=i){
                isprime[j]=false;
            }
        }
        if(isprime[i]){
            pi[++cnt] = i;//如果是素数 就计数
        }
    }
}
 
int main(){
    Pirmes();
    int n,m;
    cin>>n>>m;
    for(int i=4;i<=n;i++){
        if(!isprime[i]){///是合数
            //a[i]++;
            for(int j=1;i*j<=n;j++){//
                //if(!isprime[j]&&j<i&&j!=1)continue;
                a[i*j]++;//以i为因子的合数++
            }
        }
    }
//  for(int i=1;i<=cnt;i++)
//  for(int j=1;j<=cnt;j++){
//      if(pi[i]*pi[j]>n)break;
//      a[pi[i]*pi[j]]++;
//  }
     
    for(int i=1;i<=n;i++){
        b[a[i]]++;///K合因子数
    }
    int d;
    b[0]=0;
    for(int i=1;i<=m;i++){
        cin>>d;
        cout<<b[d]<<endl;
    }
}
相关标签: 牛客