问题标题: 酷町堂:这题怎么错了?

0
0
已解决
李宜和
李宜和
高级启示者
高级启示者
错误代码:
#include<iostream> 
#include<iomanip> 
#include<cmath> 
#include<cstdio> 
using namespace std;
string a;
long long n,m,t,f1,f2,s;
int main(){ 
	cin>>m>>n;
	for(int i=n;i<=m;i++){
		f1=1;
        f2=1;
        t=i;
		while(t){
			a+=char(t%10+48);
			t/=10;
		}
		int l=a.size();
		for(int j=0;j<=l/2;j++){
			if(a[j]!=a[l-j-1]){
				f1=0;
			}
		}
		for(int k=2;k<=sqrt(i);k++){
			if(i%k==0){
				f2=0;
                break;
			}
		}
        if(f1&&f2){
			s++;
		}
	}
	cout<<s;
	return 0; 
}

 

李宜和在2021-10-28 18:18:46追加了内容

@马烨烨 

#include<iostream> 
#include<iomanip> 
#include<cmath> 
#include<cstdio> 
using namespace std;
bool ss(int n){
	if(n==1){
		return false;
	}
	for(int i=1;i<=sqrt(n);i++){
		if(n%i==0){
			return false;
		}
	}
	return true;
}
bool hw(int n){
	int m=0,t=n;
	while(t){
		m=m*10+t%10;
		t/=10;
	}
	return (m==n);
}
int main(){ 
	int n,m,cnt=0;
	cin>>n>>m;
	for(int i=n;i<=m;i++){
		if(hw(i)&&ss(i)){
			cnt++;
		}
	}
	cout<<cnt;
	return 0; 
}

哪错了

李宜和在2021-10-28 18:20:17追加了内容

@吕梓瑜 


0
已采纳
吕梓瑜
吕梓瑜
初级天翼
初级天翼
bool ss(int n){
    if(n==1) return false;
    for(int i=2;i<=sqrt(n);i++){
        if(n%i==0) return false;
    }
    return true;
}
bool hw(int n){
    int  m=0,t=n;
    while(t){
        m=m*10+t%10;
        t/=10;
    }
    return (m==n);
}

把回文和素数放在函数里

主函数里循环m到n判断

if(hw(i) && ss(i)){
    cnt++;
}

求采纳~

0
马烨烨
马烨烨
初级守护
初级守护

这个思路是:

1.从n到m开始枚举,if要先判断是否为回文数,在判断是否为素数(这样时间复杂度低一点不容易超时)

2.回文数的判断

bool hw(int x)
{
    int t=x,y=0;
    while(t)
    {
        y=y*10+t%10;
        t/=10;
    }
    if(x==y)
        return true;
    return false;
}

3.这是素数的判断

bool Judge(int x)
{
    if(x<2) return false;
    for(int i=2;i<=sqrt(x);i++)
    {
        if(x%i==0)
            return false;
    }
    return true;
}

 

0
0
张程阳
张程阳
新手天翼
新手天翼

bool f(int x){ if(x==1)return false; for(int i=2;i<=sqrt(x);i++){ if(x%i==0)return false; } return true; }//函数

if(f(i)){ int sum=i; int cnt1=0; while(sum!=0){ cnt1=cnt1*10+sum%10; sum/=10; } if(i==cnt1)cnt++; }//核心

0
武奕楷
武奕楷
新手天翼
新手天翼
bool fw(int a){
    int b=0,c=a;
    while(c){
        b=b*10+c%10;
        c/=10;
    }
    return b==a;
}
for(int i=2;i<=sqrt(n);i++){
        if(f[i]==0){
            for(int j=i*i;j<=n;j+=i){
                f[j]=1;
            }
        }
    }

 

我要回答