2 条题解

  • 0
    @ 2025-10-4 21:01:32
    #include<stdio.h>
    #include<stdlib.h>
    int su[200],cnt=0;
    
    void sushu()//1000内
    {
        for(int i=2;i<=1000;i++)
       {
            int m=1;
            for(int j=2;j<i;j++)
            {
                if(i%j==0){m=0;break;}
            }
            if(m==0){continue;}
            if(m==1){su[cnt]=i;cnt++;}
       }
    }
    
    int main()
    {
        sushu();
        int N;
        scanf("%d",&N);
        for(int i=1;i<=N;i++)
        {
            int x;
            scanf("%d",&x);
            int min=1000,y=0;
            for(int j=0;j<200;j++)
            {
                int c=(su[j]-x);
                if(abs(c)<min)
                {
                    if((su[j+1]-x)==(x-su[j])){min=abs(c);y=j+1;}
                    else{min=abs(c);y=j;}
                }
            }
            printf("%d\n",su[y]);
        }
        return 0;
    }
    
  • 0
    @ 2025-10-4 15:31:34
    #include <algorithm>
    #include <iostream>
    using namespace std;
    const int N = 1e5 + 5;
    bool vis[N];
    int ans[N];
    int cnt = 0;
    void shai(){
    	for(int i = 2; i <= N; i++){
    		if(vis[i] == 0){
    			ans[++cnt] = i;
    			for(int j = i+i; j <= N; j+=i){
    				vis[j] = 1;
    			}
    		}
    	}
    } 
    int main(){
    	shai();
    	int t; 
    	cin >> t;
    	while(t--){
    		int x; cin >> x;
    		if(x==1){ // 特判 n==1
    			cout << 2 << endl;
    		}
    		else if(vis[x] == 0){ // 是素数直接输出
    			cout << x << endl;
    		}else{
    			int left = 0, right = 0; // 找比x小的最大素数left,比x大的最小素数right
    			for(int i = 1; i <= cnt; i++){
    				if(ans[i] < x){
    					left = ans[i];
    				}
    				if(ans[i] > x){
    					right = ans[i];
    					break;
    				}
    			}
    			if(right - x > x - left){
    				cout << left << endl;
    			}else if(right - x <= x - left){
    				cout << right << endl;
    			}
    		}		
    	}
    
    }
    
    • @ 2025-10-4 15:32:28

      考察点:素数筛

  • 1

信息

ID
179
时间
3000ms
内存
128MiB
难度
6
标签
(无)
递交数
697
已通过
200
上传者