1 条题解

  • 0
    @ 2025-11-30 16:26:38

    C :

    #include<stdio.h>
    #include<math.h>
    #define N 1500000
    int a[N];
    int main()
    {
        int i,j,b = 1;
        int m,n,t;
        int x,k;
        scanf("%d%d",&m,&n);
        if(n<=100)
        t = 100;
        else if(n >= 100 && n <= 1000)
        t = 1000;
        else if(n >= 1000 && n <= 10000)
        t = 10000;
        else if(n >= 10000 && n <= 100000)
        t = 100000;
        else if(n >= 100000 && n <= 1000000)
        t = 1000000;
        for(i = 0;i < t;i++)
        a[i] = i;
        a[1] = 0;
        for(i = 2;i < t;i++)
        {
            if(a[i]==0)
            continue;
            j = i;
            do
            {
                j += i;
                if(j >t)
                break;
                a[j] = 0;
            }
            while(j < t);
        }
        for(i = m;i <= n;i++)
        {
            if(a[i]!=0)
            {
            	k = a[i];
            	x = 0;
            	do
    			{
    			   x = k%10 + x*10;
    			   k/=10;
    		    }
    	    	while(k!=0);
    	    	if(a[x]!=0)
    	    	{
    	    		if(b == 1)
    	    		printf("%d",a[i]);
    	    		else if(b == 10)
    	    		{
    	    			printf(" %d\n",a[i]);
    	    		}
    	    		else
    		    	{
    		    		printf(" %d",a[i]);
    		    	}
    		    	if(b == 10)
    		    	b = 0;
    		    	b++;	
    	    	}
            }
        }
        return 0;
    }
    

    C++ :

    #include<stdio.h>
    #include<string.h>
    #include<math.h>
    #include<stdlib.h>
    const int M = 1000000; 
    bool mark[M];
    void Seive()
    {
    	memset(mark,1,sizeof(mark));
    	mark[0] = mark[1] = 0;
    	for(int i = 2;i <= sqrt(M);i++)
    	{
    		if(mark[i])
    		{
    			for(int j = i*i; j< M;j+=i)
    				mark[j] = 0;
    		}
    	}
    }
    int Invert(int x)
    {
    	int temp = 0,b = 1;
    	char a[8];
    	int i = 0;
    	while(x >= 10)
    	{
    		a[i] = x%10 +48;
    		i++;
    		x /= 10;
    	}
    	a[i] = x + 48;
    	a[++i] = '\0';
    	temp = atoi(a);
    	return temp;
    }
    int main()
    {
    	Seive();
    	int m,n,temp,conter = 0;
    	scanf("%d %d",&m,&n);
    	for(int i = m;i <= n;i++)
    	{
    		if(mark[i])
    		{
    			temp = Invert(i);
    			if(mark[temp])
    			{
    				conter++;
    				printf("%d",i);
    				if(conter % 10 != 0)
    					printf(" ");
    				else
    					printf("\n");
    			}
    		}
    		else
    			continue;
    	}
    	return 0;
    }
    
    • 1

    信息

    ID
    1205
    时间
    10000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者