zoukankan      html  css  js  c++  java
  • 两道简单的素数——POJ

    两道简单的素数题

    第一道

    题目链接

    简单的筛一下素数,然后模拟就行了

    题目代码

    #include<stdio.h>
    #include<iostream>
    #include<string.h>
    using namespace std;
    typedef long long LL;
    const int maxn=33000;
    int prime[maxn];
    bool check[maxn];
    int cnt=0;
    void Prime(){
        for(int i=2;i<maxn;i++)
        if(!check[i]){
            prime[cnt++]=i;
            for(int j=i*i;j<maxn;j+=i)
                check[j]=true;
        }
    }
    bool solve(LL x){
        int pp[maxn],nn[maxn],num=0;
        for(int i=0;i<cnt;i++)
        if(x%prime[i]==0){
            pp[num]=prime[i];
            nn[num]=0;
            while(x%prime[i]==0){
                nn[num]++;
                x/=prime[i];
            }
            num++;
        }
        for(int i=num-1;i>=0;i--)
            printf("%d %d ",pp[i],nn[i]);
        printf("
    ");
    }
    int n,m;
    char ch;
    int main(){
        Prime();
        while(scanf("%d",&n)){
            if(n==0)break;
            LL sum=1;
            scanf("%d",&m);
            for(int i=1;i<=m;i++)
                sum*=n;
            while(ch=getchar()){
                if(ch=='
    ')break;
                scanf("%d%d",&n,&m);
                for(int i=1;i<=m;i++)
                    sum*=n;
            }
            solve(sum-1);
        }
        return 0;
    }
    View Code

    第二道

    题目链接

    注意是连续素数!注意是连续素数!

    我第一次没注意,所以死活找不出错来

    既然是连续的,在素数序列里找一下哪些相加为x就行了

    题目代码

    #include<stdio.h>
    #include<iostream>
    #include<string.h>
    using namespace std;
    typedef long long LL;
    const int maxn=10007;
    int prime[maxn];
    bool check[maxn];
    int cnt=0;
    void Prime(){
        for(int i=2;i<maxn;i++)
        if(!check[i]){
            prime[cnt++]=i;
            for(int j=i*i;j<maxn;j+=i)
                check[j]=true;
        }
    }
    int solve(int x){
        int ans=0;
        for(int i=0;prime[i]<=x;i++){
            int t=prime[i];
            for(int j=i+1;j<cnt;j++){
                if(t==x){
                    ans++;
                    break;
                }
                else if(t>x)break;
                t+=prime[j];
            }
        }
        return ans;
    }
    int n;
    int main(){
        Prime();
        while(scanf("%d",&n)){
            if(n==0)break;
            printf("%d
    ",solve(n));
        }
        return 0;
    }
    View Code
  • 相关阅读:
    动易CMS 实现ctrl+v粘贴图片并上传、word粘贴带图片
    帝国CMS 实现ctrl+v粘贴图片并上传、word粘贴带图片
    php大文件上传(切片)工具
    php大文件上传(分块)
    php大文件上传(分片)
    Nginx大文件上传(切片)
    百度WebUploader大文件上传(切片)
    WebUploader大文件上传(切片)
    html5大文件上传(切片)
    jquery大文件上传(切片)
  • 原文地址:https://www.cnblogs.com/helman/p/11341948.html
Copyright © 2011-2022 走看看