• 0x31 质数


    poj2689 算根号R的质数,然后把L~R区间(这个很小啊)的合数判下

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<cstdlib>
    #include<algorithm>
    #include<cmath>
    using namespace std;
    typedef long long LL;
    
    int pr,prime[1100000];bool v[1100000];
    void get_prime(int li)
    {
        pr=0;memset(v,false,sizeof(v));
        for(int i=2;i<=li;i++)
        {
            if(v[i]==false)prime[++pr]=i;
            for(int j=1;j<=pr&&i*prime[j]<=li;j++)
            {
                v[i*prime[j]]=true;
                if(i%prime[j]==0)break;
            }
        }
    }
    
    int blen,bprime[1100000];
    int main()
    {
        int L,R;
        while(scanf("%d%d",&L,&R)!=EOF)
        {
            if(L==1)L++;
            get_prime( (int(sqrt(double(R)))) );
            memset(v,false,sizeof(v));
            for(int j=1;j<=pr;j++)
            {
                LL d=L%prime[j]==0?L:((LL)prime[j])*((LL)(L/prime[j]+1));
                if(d==prime[j])d+=prime[j];
                while(d<=R)
                {
                    v[d-L+1]=true;
                    d+=prime[j];
                }
            }
            blen=0;
            for(int i=1;i<=R-L+1;i++)
                if(v[i]==false)bprime[++blen]=i;
            if(blen<=1)printf("There are no adjacent primes.
    ");
            else
            {
                int mx1=-1,mx2,mn1=-1,mn2;
                for(int i=1;i<blen;i++)
                {
                    if(mx1==-1||mx2-mx1<bprime[i+1]-bprime[i])
                        mx1=bprime[i], mx2=bprime[i+1];
                        
                    if(mn1==-1||mn2-mn1>bprime[i+1]-bprime[i])
                        mn1=bprime[i], mn2=bprime[i+1];
                }
                mx1+=L-1, mx2+=L-1, mn1+=L-1, mn2+=L-1;
                printf("%d,%d are closest, %d,%d are most distant.
    ",mn1,mn2,mx1,mx2);
            }
        }
        return 0;
    }
    poj2689

    阶乘分解 筛素数然后看每个素数的贡献啊。

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<cstdlib>
    #include<algorithm>
    #include<cmath>
    using namespace std;
    typedef long long LL;
    
    int pr,prime[1100000];bool v[1100000];
    void get_prime(int li)
    {
        pr=0;memset(v,false,sizeof(v));
        for(int i=2;i<=li;i++)
        {
            if(v[i]==false)prime[++pr]=i;
            for(int j=1;j<=pr&&i*prime[j]<=li;j++)
            {
                v[i*prime[j]]=true;
                if(i%prime[j]==0)break;
            }
        }
    }
    
    int main()
    {
        int n;
        scanf("%d",&n);
        get_prime(n);
        
        for(int j=1;j<=pr;j++)
        {
            printf("%d ",prime[j]);
            LL k=prime[j];int c=0;
            while(k<=n)
            {
                c+=n/k;
                k*=prime[j];
            }
            printf("%d
    ",c);
        }
        return 0;
    }
    阶乘分解
  • 相关阅读:
    lau-表和for while循环
    lua学习笔记——lua数据类型
    javascript 高级程序设计1--14章重点总结
    消息推送之androidpn部署
    extjs底层源码实现继承分析
    cache数据库学习周结
    sql Cursor的用法
    java 报表到excel
    html5之datalist标签
    学习笔记之html5相关内容
  • 原文地址:https://www.cnblogs.com/AKCqhzdy/p/9309952.html
Copyright © 2020-2023  润新知