USACO Section 1.5 Prime Palindromes
2014-03-18 21:54
267 查看
/* ID: lucien23 PROG: pprime LANG: C++ */ #include<iostream> #include<fstream> #include<set> #include<cmath> #include<string> #include<sstream> #include<algorithm> using namespace std; set<int> primes;//10000以内的素数 bool isPalindrome(int num); bool isPrime(int num); int main() { ifstream infile("pprime.in"); ofstream outfile("pprime.out"); if(!infile || !outfile) { cout<<"file operation failure!"<<endl; return -1; } int a,b; infile>>a>>b; set<int> pprimes; /* *可能既为质数又是回文数的 *必然是5或者以1,3,7,9结尾的数 */ //筛选出10000以内的素数 for (int i=2;i<=10000;i++) { primes.insert(i); } for (int i=2;i<=100;i++) { int num=i*2; while(num<=10000) { primes.erase(num); num+=i; } } set<int> palindromes; //产生回文 if(a<10) {//产生1位数的回文 palindromes.insert(5); palindromes.insert(7); palindromes.insert(9); } if(b>10) {//产生2位数的回文 palindromes.insert(11); } if(b>100) {//产生3位数的回文 for (int i=1;i<=9;i++) { if(i%2==0 || i==5) continue; for (int j=0;j<=9;j++) { palindromes.insert(i*100+j*10+i); } } } if(b>10000) {//产生5位数的回文 for (int i=1;i<=9;i++) { if(i%2==0 || i==5) continue; for (int j=0;j<=9;j++) { for (int k=0;k<=9;k++) { palindromes.insert(i*10000+j*1000+k*100+j*10+i); } } } } if(b>1000000) {//产生7位数的回文 for (int i=1;i<=9;i++) { if(i%2==0 || i==5) continue; for (int j=0;j<=9;j++) { for (int k=0;k<=9;k++) { for (int m=0;m<=9;m++) { palindromes.insert(i*1000000+j*100000+k*10000+m*1000+k*100+j*10+i); } } } } } //判断是否为素数 for (set<int>::iterator it=palindromes.begin();it!=palindromes.end();it++) { if(*it>=a && *it<=b && isPrime(*it)) { pprimes.insert(*it); }else if(*it>b){ break; } } for(set<int>::iterator it=pprimes.begin();it!=pprimes.end();it++) { outfile<<*it<<endl; } return 0; } bool isPrime(int num) { if(primes.find(num)!=primes.end()) return true; int temp=sqrt((double)num); for(set<int>::iterator it=primes.begin(); *it<=temp && it!=primes.end(); it++){ if(num%*it==0) return false; } return true; }
相关文章推荐
- HighCharts之2D折线图
- Struts2—整合Spring
- struts 标签1
- 浙大PAT 3-06. 表达式转换 (解题思路)
- 算术基本定理,又称为正整数的唯一分解定理
- Android APK 签名比对
- UAS 和 UAC
- USACO Section 1.5 Number Triangles
- JavaScript面向对象
- 判断一个正整数是否为质数
- java做的一整形数据进制转换器
- 写给不想做OJ题的C++学习者
- Ehcache 中ehcache.xml 配置详解和示例
- Android APK 签名比对
- barcode EAN13 最后一位验证码
- TCP/IP协议栈概述及各层包头分析
- C#特性学习与使用(为枚举定义Description)
- JDBC应用程序的基本步骤
- poj分类
- C#学习之用Microsoft.office.interop.excel.dll导出excel