3 条题解

  • 1
    @ 2025-11-26 22:38:57
    #include <stdio.h>            
    #include <math.h>           
    #include <stdbool.h>        
    int primes[1000010];    
    int cnt = 0;          
    int main() {
        bool is_prime[1000010];  
        for (int i = 0; i <= 1000010; i++) {  
            is_prime[i] = true;        
        is_prime[0] = is_prime[1] = false;  
        }
        for (int i = 2; i <= sqrt(1000010); i++) {
            if (is_prime[i]) {  
                for (int j = i * i; j <= 1000010; j += i) {
                    is_prime[j] = false;  
                }
            }
        }
        for (int i = 2; i <= 1000010; i++) {
            if (is_prime[i]) {  
                primes[cnt++] = i;
            }
        }
        int n;                    
        scanf("%d", &n);          
        while (n--) {              
            int m,num;                 
            scanf("%d", &m);     
            if(m==1){printf("2 1\n");continue;}  
            for(int i=0;i<=1000010;i++){
                if(primes[i]<=m&&primes[i+1]>=m){
                    if(m-primes[i]<=primes[i+1]-m){
                        num=m-primes[i];
                        printf("%d %d\n",primes[i],num);
                    }
                    if(m-primes[i]>primes[i+1]-m){
                        num=primes[i+1]-m;
                        printf("%d %d\n",primes[i+1],num);
                    }
                    break;
                }
            }
        }    
        return 0;  
    }
    

    //埃及筛,不够快可以加个二分查找,刚好卡时间过

    信息

    ID
    127
    时间
    3000ms
    内存
    128MiB
    难度
    8
    标签
    (无)
    递交数
    2367
    已通过
    310
    上传者