3 条题解

  • 3
    @ 2022-6-18 14:28:00

    此题没有含金量,纯模拟。

    首先判断素数,请移步http://112.16.216.176:29860/d/zjzx/p/41/solution,网站挂了就手动来到P41的题解区。

    模板:

    inline bool ss(int n) {
    	if(n<2) return false;
    	for(int i=2; i*i<=n; ++i) {
    		if(n%i==0) {
    			return false;
    		}
    	}
    	return true;
    }
    

    其次就是判断是不是回文数,这里我会给出两种方法(注意,一位数是特殊的回文数):

    ①、双指针

    顾名思义,就是用两个指针,一个指向头,另一个指向尾,然后判断这两个下标上的数字相不相等,如果中断则返回假,如果最后头指针大于等于尾指针的位置,那么就返回真。

    代码:

    inline bool huiwen(int k) {
    int j=0,a[11];
    	while(k) {
    		a[++j]=k%10;
    		k/=10;
    	}
    	int x=1,y=j;
    	while(a[x]==a[y]&&x<y) {
    		++x,--y;
    	}
    	return x>=y;
    }
    

    ②、数学

    假设现在有一串数列2506887052,我们根据第①种办法,先枚举第一位1和最后一位10,然后枚举第二位和倒数第二位9......那么如果前面取第i位,不难看出后面就要取第(n-i+1)位,随后比较。

    代码:

    inline bool huiwen(int k) {
    int j=0,a[11];
    	while(k) {
    		a[++j]=k%10;
    		k/=10;
    	}
    	for(int i=1; i<=n; i++) {
    		if(a[i]!=a[n-i+1]) {
    			return false;
    		}
    	}
    	return true;
    }
    

    随后判断这个数如果既是素数,还是一个回文数,那么就将它输出,但是...

    注意!!!

    每行输出5个满足题目条件的数
    

    当时坑了我半个小时......

    输出代码:

    if(ss(i)&&huiwen(i)) {//i是枚举的数字,满足1<=i<=n)
            ++sum;
    	p=false;
    	if(sum%5!=0) cout<<i<<' ';
    	else cout<<i<<'\n';
    }
    
  • 0
    @ 2026-4-6 15:29:42
    #include<bits/stdc++.h>
    using namespace std;
    int n,k,p,q;
    inline int hw(int x)
    {
        int k=0,t=x;
        while(t)
        {
            k=k*10+t%10;
            t=t/10;
        }
        if(k==x) return 78;//细节
            else return 91;//细节
    }
    inline int ss(int x)
    {
        if(x<2) return 91;//细节
        int k=sqrt(x);
        for(int i=2;i<=k;i++)
            if(x%i==0) return 91;//细节
        return 78;//细节
    }
    int main()
    {
        ios::sync_with_stdio(false);
        cin.tie(0),cout.tie(0);
        cin>>n;
        for(int i=2;i<=n;i++)
        {
            q=hw(i);
            p=ss(i);
            if(q==78&&p==78)//十分细节
            {
                k++;
                if(k%5==0) k=0,cout<<i<<endl;
                    else cout<<i<<' ';
            }
        }
        return 0;
    }
    
    • -3
      @ 2025-6-30 11:14:36

      #include<bits/stdc++.h> using namespace std; int n,s; bool ss(int a) { if(a<=1) return false; for(int i=2;ii<=a;i++) { if(a%i==0)return false; } return true; } bool hw(int a) { if(a<10) return true; int x=0,b=a; while(b>0) { x=x10+b%10; b/=10; } if(xa) return true; else return false; } int main() { cin>>n; for(int i=2;i<=n;i++) { if(hw(i)&&ss(i)) { s++; cout<<i<<' '; } if(s5) { cout<<endl; s=0; } } return 0; }

      • 1

      信息

      ID
      40
      时间
      1000ms
      内存
      256MiB
      难度
      7
      标签
      (无)
      递交数
      275
      已通过
      73
      上传者