两道简单的素数——POJ - 1365,POJ - 2739

两道简单的素数题

第一道

题目链接

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

题目代码

#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("\n");
}
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=='\n')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\n",solve(n));
    }
    return 0;
}
View Code

 

posted @ 2019-08-12 19:03  helman78  阅读(158)  评论(0编辑  收藏  举报