• NOI-OJ 1.13 ID:5 素数回文数的个数


    整体思路

    • 使用埃拉拖色尼算法提前计算出1000以内的素数表。

    • 设计一个回文判断函数isHW(int n),难点在于数字回文的判断。一个简单的方法是将数字n使用sprintf输出在一个数组中,然后从数组的头和尾开始进行逐一对比。

    著名金融家“索罗斯”的名字“SOROS”就是一个回文字串。

    例程

    #include<iostream>
    #include<cmath>
    #include<cstring>
    using namespace std;
    bool ss[10001];				//素数表
    int  count;					//计数器
    
    void altsn(int N){			//埃拉拖色尼算法
    	ss[0]=1;
    	ss[1]=1;
    	int p=2;
    	while(p<=sqrt(N))
    		if(ss[p]) p++;
    		else{
    			int times=2;
    			while(p*times<=N)	{ ss[p*times]=1; times++;}
    			p++;
    		}
    }
    
    bool isP(int n){			//素数判断函数
    	if(!ss[n])	return true;
    	return false;
    }
    
    bool isHW(int n){			//回文判断函数
    	char s[10];
    	int  len, i, j;
    	sprintf(s, "%d", n);	//将n输出值数组中
    	len=strlen(s);
    	for(i=0, j=len-1; s[i]==s[j] && i<j; i++,j--) ;	//注意这个循环
    	if(i==j || (j+1)==i)	return true;			//注意成为回文的条件
    	return false;
    }
    
    int main(){
    	int N;
    	cin>>N;
    	altsn(N);
    	for(int i=11; i<=N; i++)						//从11~N依次判断
    		if(isP(i) && isHW(i))	count++;			//是素数且是回文
    	printf("%d", count);
    	return 0;
    }
  • 相关阅读:
    CSS 兼容 总结
    IF IE
    取消chrome浏览器下input和textarea的默认样式
    左右浮动边距为0,中间间隔一定
    标题右边10px位置紧跟发布时间
    两款CSS3样式可视化在线生成工具
    文字截取,多余文字用省略号(...)代替
    O
    N
    M
  • 原文地址:https://www.cnblogs.com/lfyzoi/p/6697659.html
Copyright © 2020-2023  润新知