求助最后一个超时害
查看原帖
求助最后一个超时害
880007
dreamlike楼主2023/2/11 03:35

个人思路就是先检验是否为回文数,再检验是否为质数。回文数是用倒置来验证,数目大是建议用字符串,但这道题是整数递增来一个个验证的,数据类型匹配不了,我脑子实在没能转过来害;质数的话已经是平方减半了,不知道还能不能优化。 目前最后一个超时是1.02s,测试数据是5 100000000,卑微请各位大佬赐教! 代码如下:

#include<stdio.h>
int prime(int x){
	int i;
	for(i=2;i*i<=x;i++)
		if(x%i==0) return 0;
	return x<=1?0:1;
}
int isHuiwenNumber(int n)
{
    int sum,tmp;
    tmp=n;
    sum=0;
    while(n)  //从低位到高位分解n的每位的数字,然后依次相加
    {
        sum=sum*10+n%10;
        n/=10;
    }
    if(tmp == sum) //如果重新每位求和的值等于原值,则该数为完数,返回1,否则返回0
        return 1;
    else
        return 0;
}
int main(){
    int a,b,i;
    scanf("%d %d",&a,&b);
    for(i=a;i<=b;i++)
    {
        if(isHuiwenNumber(i))  
        {
            if(prime(i))
                printf("%d\n",i);
        }
    }
}
2023/2/11 03:35
加载中...