• uvaIrrelevant Elements


    唯一分解定理。

    可以看出在最后每个a的系数是杨辉三角的第n行。

    但是不能递推,否则会tle。

    就从C(n-1,0)开始乘n-k再除以k。记录下每个的系数,如果该项系数小于m就代表和答案有关。

    代码里的ok为true时,代表和答案有关。

    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    #include<cmath>
    using namespace std;
    const int maxn = 100000 + 10;
    
    bool ok[maxn];
    int n,m;
    int e[maxn],prime[maxn],cnt,num;
    int ans[maxn];
    
    void init(int n) {
        memset(e,0,sizeof(e)); cnt=0; num=0;
        int m = (int) sqrt(n);
        for(int i=2;i<=m;i++) if(n%i==0) {
            prime[++cnt]=i;
            while(n%i==0) {
                e[cnt]++;
                n/=i;
            }
        }
        if(n>1) {
            prime[++cnt]=n;
            e[cnt]=1;    
        }
    }
    
    int main() {
        while(scanf("%d%d",&n,&m)==2) {
            init(m);
            memset(ok,0,sizeof(ok));
            for(int i=1,h;i<=cnt;i++) {
                int res=0;
                for(int k=1,x;k<n;k++) {
                    x=n-k;
                    while(x%prime[i]==0) {
                        x/=prime[i];
                        res++;    
                    }
                    x=k;
                    while(x%prime[i]==0) {
                        x/=prime[i];
                        res--;    
                    }
                    if(res<e[i]) ok[k]=1;
                }
            }
            for(int i=1;i<n;i++) if(!ok[i]) 
                ans[++num]=i;    
            printf("%d
    ",num);
            if(num) {
                for(int i=1;i<num;i++) 
                    printf("%d ",ans[i]+1);
                printf("%d",ans[num]+1);
            }
            printf("
    ");
        }
        return 0;
    }
  • 相关阅读:
    Fedora install chrome
    Ubuntu13.04 安装 chrome
    cjb
    屏蔽视频广告
    tars环境部署
    rpm包安装失败的解决办法
    Java环境变量配置错误
    Protobuf的安装使用
    fpm打包工具
    gcc6.3的安装
  • 原文地址:https://www.cnblogs.com/invoid/p/5574533.html
Copyright © 2020-2023  润新知