NYOJ--24--素数距离问题

/*
    Name: NYOJ--24--素数距离问题
    Author: shen_渊 
    Date: 17/04/17 16:42
    Description: 原来代码看不下去了o(╯□╰)o 
*/
#include<iostream>
using namespace std;
int isPrime(int); 
int main(){
    ios::sync_with_stdio(false);
    int T;cin>>T;
    while(T--){
        int n;cin>>n;
        if(n==1)cout<<"2 1"<<endl;
        else if(isPrime(n)){
            cout<<n<<" 0"<<endl;
        }else{
            int left_value,right_value = left_value = n;
            while(!isPrime(left_value))left_value--;
            while(!isPrime(right_value))right_value++;
            if((n - left_value) > (right_value - n)) cout<<right_value<<" "<<right_value-n<<endl;
            else cout<<left_value<<" "<<n-left_value<<endl;
        }
    }
    return 0;
}
int isPrime(int n) {
    for(int j=2 ;j*j<=n ;++j){
        if(n%j == 0)return 0;
    }
    return 1;
}
 

/*
    以前的代码:泪奔 
*/
#include<stdio.h>
#include<malloc.h>
#include<math.h>
int main()
{
    int *a,N,i,j=0,k,m,*num,d,n,*q;
    scanf("%d",&N);n=N;
    a=(int *)malloc((N+1)*sizeof(int));
    num=(int *)malloc(2*(N+1)*sizeof(int));
    q=(int *)malloc(2*(N+1)*sizeof(int));
    for(i=0;i<N;i++)scanf("%d",&a[i]);
    fflush(stdin);
    while(N--){
        if(a[j]==0||a[j]==1){
            if(a[j]==0){
                num[j]=2;
                q[j]=2;
                j++;
            }
            else{
                num[j]=2;
                q[j]=1;
                j++;
            }
        }else{
            k=1;
            for(i=2;i<=sqrt(a[j])&&k==1;i++)if(a[j]%i==0)k=0;
            if(k==1){
                num[j]=a[j];
                q[j]=0;
                j++;
            }
            if(k==0){
            k=1;
            m=a[j]-1;
                while(k&&m>1){
                for(i=2;i<=sqrt(m);i++)if(m%i==0)goto s1;
                k=0;
                s1:      m--;
                } 
                num[j]=m+1;
                k=1;m=a[j]+1;
                while(k&&m>1){
                    for(i=2;i<=sqrt(m);i++)if(m%i==0)goto s2;
                    k=0;
                    s2:      m+=1;
                } 
                m--;
                if((a[j]-num[j])!=(m-a[j]))k=(a[j]-num[j])>(m-a[j])?m:num[j];
                else k=num[j];
                
                d=(a[j]-num[j])>(m-a[j])?(m-a[j]):(a[j]-num[j]);
                q[j]=d;
                num[j]=k;
            
                j++;
            }
        }
    }
    for(i=0;i<n;i++)printf("%d %d\n",num[i],q[i]);
    return 0;
}

 

 

posted @ 2016-06-30 09:03  朤尧  阅读(356)  评论(0)    收藏  举报