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;  
    }
    

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

    • 0
      @ 2023-10-6 11:09:00

      纯暴力写法

      #include<stdio.h>
      #include<math.h>
      int main() {
      int n;
      scanf("%d",&n);
      int b;
      int k,q,j;
      int qian=0,hou=0;
      for(int i=1; i<=n; i++) {
      scanf("%d",&b);
      int su=1;
      if(b==1) {
      printf("2 1");
      printf("\n");
      } else if(b!=1) {
      for(int j=2; j<=sqrt(b); j++) {
      if(b%j==0) {
      su=0;
      break;
      }
      
      
      
      }
      		if(su==1) {
      			printf("%d 0\n",b);
      		} else if(su==0) {
      			for(k=b;; k++) {
      				su = 1;
      				for(j=2; j<=sqrt(k); j++) {
      					if(k%j==0) {
      						su=0;
      						break;
      					}
      
      				}
      				if (su==1) {
      					break;
      				}
      			}
      			 hou = k - b;
      			for(q=b;; q--) {
      				su = 1;
      				for(j=2; j<=sqrt(q); j++) {
      					if(q%j==0) {
      						su=0;
      						break;
      					}
      
      				}
      				if (su==1) {
      					break;
      				}
      			}
      			 qian=b-q;
                   if(hou>qian){
      			printf("%d %d",q,qian);
      		    }
      		    else if(hou<qian){
      			printf("%d %d",k,hou);
      		    }
      		    else if(hou==qian){
      		    	printf("%d %d",q,qian);
      		    }
                  printf("\n");
      		}
      		
      
      	}
      }
      return 0;
      

      }

      • 0
        @ 2023-8-15 17:34:00

        #include<iostream> #include<cmath> using namespace std;

        bool isprime(int n) { for(int k=2;k<=sqrt((double)n);k++) if((n%k)0) return false; return true; } int main() { int n; cin>>n; while(n--) { int num,i,j; cin>>num; if(num1) { cout<<"2 1"<<endl; continue; } for(i=num;!isprime(i);i--); for(j=num;!isprime(j);j++);

        if((num-i)<(j-num))
        		cout<<i<<' '<<(num-i)<<endl;
        	else if((num-i)>(j-num))
        		cout<<j<<' '<<(j-num)<<endl;
        	else if((num-i)==(j-num))
        		cout<<i<<' '<<(num-i)<<endl;
        }
        

        }

        • 1

        信息

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