牛牛的K合因子数
程序员文章站
2022-06-07 13:05:35
...
思路:素数求出来剩下的为合数,求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;
}
}
推荐阅读
-
C#递归算法寻找数组中第K大的数
-
在CRT上面玩现在的游戏是什么体验?数毛社: 不输给4K LCD
-
#7 找出数组中第k小的数
-
红米官微科普K30 5G配置:天线数是4G的2.5倍 器件增加500个
-
牛客题霸——NC156 数组中只出现一次的数(其它数出现k次)(Javascript)
-
二分查找第一个比k大的数
-
在张飞面前坚持数合的邢道荣,为何在赵云手下坚持不了一回合?
-
牛牛举办了一场数字游戏,有n个玩家参加这个游戏,游戏开始每个玩家选定一个数,然后将这个数写在纸上(十进制数,无前缀零),然后接下来对于每一个数字将其数位按照非递减顺序排列,得到新的数,新数的前缀零将被
-
分治与递归-找k个临近中位数的数
-
8K电视明年出货超百万台 数毛画质的8K电视值得买吗?