11.4测试divisors

Posted wuhu-jjj

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了11.4测试divisors相关的知识,希望对你有一定的参考价值。

题目描述
给定m 个不同的正整数a1,a2,.... am,请对0 到m 每一个k 计算,在区间[1, n] 里有多少正整数

是a 中恰好k 个数的约数。

 

输入
第一行包含两个正整数n,m,分别表示区间范围以及a 数组的大小。

第二行包含m 个不同的正整数a1,a2,.... am,表示a 数组。

 

输出
输出m + 1 行,每行一个整数,其中第i 行输出k = i 的答案。

 

样例输入
10 3
4 6 7
样例输出
4
4
1
1
数据范围

 m<=200,n<=10^9,ai<=10^9

题解:emmm数论大法好,注意0的情况由所有情况推过来即可。

#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<queue>
using namespace std;
const int N=1e7+2;
int ans[N],n,m,xx,c[N],cnt;

void Yao_Chen(int x){
    for(int i=1;i*i<=x;i++){
        if(x%i==0){
            c[++cnt]=x/i;
            c[++cnt]=i;
        }
        if(i*i==x) cnt--;
    }
}

int main(){
    freopen("div.in","r",stdin);
    freopen("div.out","w",stdout);
    scanf("%d %d",&n,&m);
    for(int i=1;i<=m;i++){
        scanf("%d",&xx);
        Yao_Chen(xx);
    }
    sort(c+1,c+cnt+1);
    int last=c[1],sum=1,ps=0;
    for(int i=2;i<=cnt && c[i]<=n;i++){
        if(c[i]!=last)
           { ans[sum]++; last=c[i]; sum=1; }
        else sum++;
    }
    ans[sum]++;
    for(int i=1;i<=m;i++)
        ps+=ans[i];
    printf("%d
",n-ps);
    for(int i=1;i<=m;i++)
        printf("%d
",ans[i]);
    return 0;
}

 

以上是关于11.4测试divisors的主要内容,如果未能解决你的问题,请参考以下文章

[CSP-S模拟测试]:Divisors(数学)

csp-s模拟测试58「Divisors」·「Market」·「Dash Speed」?

第七周动手动脑(2018.10.29-11.4)

XCTest-Gherkin:从 11.1 更新时,UI 测试在 11.4+ 上崩溃

11.4 测试Market

如何在 macOS Mojave 10.14.6 上运行 Xcode 11.4