5 条题解

  • 1
    @ 2025-11-14 19:05:25
    #include <stdio.h>
    int main(){
        int n;
        scanf("%d",&n);
        while(n--){
            int x,i,j,k=0,a[200]={0};
            scanf("%d",&x);
            for(i=2;i<1000;i++){
                for(j=2;j<=i;j++){
                    if(i%j==0)break;
                }
                if(i==j){a[k]=i;k++;}
                if(a[k-2]<=x&&a[k-1]>=x)break;
            }
            if(-(a[k-2]-x)>=a[k-1]-x)printf("%d\n",a[k-1]);
            else printf("%d\n",a[k-2]);
        }
    }
    
    • @ 2025-11-14 19:08:26

      真不知道题解代码为什么写那么长,明明十几行代码就能解决

  • 1
    @ 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
    @ 2026-4-17 10:35:03
    #include <bits/stdc++.h>
    
    using namespace std;
    
    int su[200];
    int cnt = 0;
    void sushu() {
        for (int i=2; i<=1000; i++) {//列举2到1000之间的数;::
            int is = 1;
            for (int j=2; j<i; j++) {
                if (i%j==0) {
                    is = 0;
                    break;
                }
            }
            if (is==1) {
                su[cnt] = i;
                cnt++;
            }
    
        }
    }
    
    
    int findzuijisushu(int x) {
        int bestsushu = su[0];// 假设第一个是最近的素数::
        int bestdist = abs(su[0] - x);
            for (int i=1; i<cnt; i++) {
                int dist = abs(su[i]-x);
    
                if (dist < bestdist) {//距离更小,直接更新::
                    bestdist = dist;
                    bestsushu = su[i];
                } else if (dist == bestdist) {//相等情况:::
                        if (su[i]>bestsushu) {
                            bestsushu = su[i];
                  }
             }
            }
    
    
    return bestsushu;
    
    }
    
    int main () {
        sushu();
        int N; cin>>N;
        while(N--) {
            int x; cin>>x;
            int result = findzuijisushu(x);
            cout<<result<<endl;
        }
        return 0;
    }
    
    • 0
      @ 2025-10-5 16:43:25

      #include<stdio.h>

      int main(){

      int t,n,min=0,max=0;

      scanf("%d",&t);

      while(t--){

      scanf("%d",&n);

      for(int i=2;i<=n;i++){

      int p=0;

      for(int j=2;j<i;j++){

      if(i%j==0){

      p=1;

      break;

      }

      }

      if(p==0){

      min=i;

      }

      }

      for(int i=n+1;i>0;i++){

      int p=0;

      for(int j=2;j<i;j++){

      if(i%j==0){

      p=1;

      break;

      }

      }

      if(p==0){

      max=i;

      break;

      }

      }

      if(n2||n0){

      min=2;

      }

      if(n-min<max-n){

      printf("%d\n",min);

      }else{printf("%d\n",max);}

      }

      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
      标签
      (无)
      递交数
      783
      已通过
      227
      上传者