回文素数的判断,怎么更高效率判断素数
Posted hchacha
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了回文素数的判断,怎么更高效率判断素数相关的知识,希望对你有一定的参考价值。
题目要求是不超过1s
自己写的代码如下:注意sqrt处的= ,25的质因数为5*5,不加=,25会被判断为素数
1 bool isP(int n) 2 { 3 int dig = 0; 4 int sum = 0; 5 int m = n; 6 while (n) 7 { 8 dig = n % 10; 9 n = n / 10; 10 sum = sum * 10 + dig; 11 } 12 13 if (sum == m) return true; 14 else return false; 15 16 } 17 bool isprimer(int n) 18 { 19 for (int i = 2; i <=sqrt(n); i++) 20 if (n%i == 0) return false; 21 return true; 22 } 23 int main() 24 { 25 26 int l, r; 27 while (cin >> l >> r) 28 { 29 int count = 0; 30 for (int i = l; i <= r; i++) 31 { 32 if (isP(i) && isprimer(i)) count++; 33 } 34 cout << count << endl; 35 } 36 }
只能通过70%,原因是isprimer的效率不够高,这两个函数的先后调用顺序也要注意
http://blog.csdn.net/tigerisland45/article/details/70236364
高效率的素数为:
1 bool isprime(int n) 2 { 3 if(n == 1) 4 return false; 5 6 if(n == 2) 7 return true; 8 9 if(n % 2 == 0) 10 return false; 11 12 int end = sqrt(n); 13 for(long i=3; i<=end; i+=2) 14 if(n % i == 0) 15 return false; 16 17 return true; 18 }
1、判断回文数: int转换为string,再反转,比较,或者从首尾开始,向中间比较
1 int isPr(int n) 2 { 3 //数字字符转换为int,\'0\'-\'0\',\'1\'-\'0\'为1 4 string s = to_string(n); 5 /*string s2 = s; 6 reverse(s.begin(), s.end());*/ 7 for (int i = 0; i <=s.size()/2; i++) 8 { 9 if (s[i] != s[n - 1 - i]) return false; 10 } 11 //return s == s2; 12 return true; 13 }
(int i = 0; i <=s.size()/2; i++)
0-7,i=s.size()/2=4, n-1-i=3,i=3时要比较一次s[3]和s[4],i=4又要比较一次s[4]和s[3]
0-8,i最大为4,i=4,比较s[4]和s[4]
如果i<s.size()/2,不要等号,能少一次比较,数组个数为奇数能不扫描中间的s[4]
2、怎样获得一个数的首位?下面不用转换为string,直接获取数字的首尾比较(http://qiemengdao.iteye.com/blog/1660227)
1 bool isPalindrome(int x) 2 { 3 if (x < 0) return false; 4 int div = 1; 5 while (x / div >= 10) { 6 div *= 10; 7 } 8 while (x != 0) { 9 int l = x / div; 10 int r = x % 10; 11 if (l != r) return false; 12 x = (x % div) / 10; 13 div /= 100; 14 } 15 return true; 16 }
以上是关于回文素数的判断,怎么更高效率判断素数的主要内容,如果未能解决你的问题,请参考以下文章