4 条题解

  • 0
    @ 2023-12-24 11:28:43

    拆成一半!!!哈哈哈

    #include <iostream>
    #include <cmath>
    #pragma GCC optimize(3)
    using namespace std;
    const int N=1e8+10;
    int n,ans;
    long long sum[N],len;
    bool c1(int x)
    {
    	if(x==1)
    	{
    		return 0;
    	}
    	for(int i=2;i<=sqrt(x);++i)
    	{
    		if(x%i==0)
    		{
    			return 0;
    		}
    	}
    	return 1;
    }
    int main()
    {
    	ios::sync_with_stdio(0);
    	cin.tie(NULL);
    	cout.tie(NULL);
    	cin>>n;
    	if(n==1)
    	{
    		cout<<4<<endl<<"2 3 5 7";
    		return 0;
    	}
    	long long c;
    	if(n&1)
    	{
    		c=pow(10,n/2-1);
    		for(int i=c;i<=c*10-1;++i)
    		{
    			for(int k=0;k<=9;k++)
    			{
    				long long p=i,l=0;
    				while(p!=0)
    				{
    					l*=10;
    					l+=p%10;
    					p/=10;
    				}
    				long long j=i;
    				j*=10;
    				j+=k;
    				j*=c*10;
    				j+=l;
    				if(c1(j))
    				{
    					ans++;
    					sum[++len]=j;
    				}
    			} 
    			
    		}
    	}
    	else 
    	{
    	    c=pow(10,n/2-1);
    	    for(int i=c;i<=c*10-1;++i)
    		{
    			long long p=i,l=0;
    			while(p!=0)
    			{
    				l*=10;
    				l+=p%10;
    				p/=10;
    			}
    			long long j=i;
    			j*=c*10;
    			j+=l;
    			if(c1(j))
    			{
    				ans++;
    				sum[++len]=j;
    			}
    		}
    	} 
    	cout<<ans<<endl;
    	for(int i=1;i<=len;++i)
    	{
    		cout<<sum[i]<<" "; 
    	}
    	return 0;
    }
    
    • 0
      @ 2023-5-28 20:03:34

      如果你也跟我我一样TLE,那么这件事情真的是泰库……啊呸,回归正题

      看到这题,我就想到先暴力每一个数,先判断素数,再判断回文数,这样太慢啦!喜得吉利分数66,但是不要怕,我会比你先WA的!

      经过了114514个夜晚的苦思冥想,我终于想出来啦:先枚举范围内的回文数,在逐一判断素数,果仁AC了

      核心代码:

      for(int i=10;i<=99999;i++){//上限是9位,就枚举到9/2+1位
      	int tmp=i/10,k=i;//细节除以10,由于除了11,所有的偶数位数都不是素数 
      	while(tmp)k=k*10+tmp%10,tmp/=10;//创造奇数位回文数 
      	if(x<=k&&k<=y&&is_prime(k))//代码区: 提示:将符合的数加入数组;//判断是否在范围内 
      }
      

      (记得特判1位数和两位数,我的代码还是可以优化的)

      • -1
        @ 2024-6-1 18:48:24

        ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo00(|^|)

        • -1
          @ 2023-4-21 21:11:51
          #include<iostream>
          using namespace std;
          
          int nn[6000];
          
          int main()
          
          {
          
          int n,s=1,x,y,num=0;
          
          bool f;
          
          cin>>n;
          
          if(n==2)
          
          cout<<"1\n11";
          
          else if(n%2==0)
          
          cout<<0;
          
          else if(n==1)
          
          cout<<"4\n2 3 5 7";
          
          else
          
          {
          
          for(int i=1;i<(n+1)/2;i++)s*=10;//以1*10^((n+1)/2-1)为基数
          
          for(int i=s;i<s*10;i++)
          
          {//到1*10^((n+1)/2)结束
          
          f=1;
          
          for(y=i/10,x=i;y>0;y/=10)x=x*10+y%10;//构造回文数
          
          for(int j=2;j*j<=x;j++)//判断构造数是否为素数
          
          if(x%j==0)
          
          {
          
          f=0;
          
          break;
          
          }
          
          if(f)nn[num++]=x;
          
          }
          
          cout<<num<<endl;
          
          for(int i=0;i<num;i++)
          
          cout<<nn[i]<<" ";
          
          }
          
          return 0;
          
          }
          
          • 1

          信息

          ID
          1001
          时间
          1000ms
          内存
          128MiB
          难度
          7
          标签
          递交数
          326
          已通过
          64
          上传者