回文素数的判断,怎么更高效率判断素数

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 }
View Code

只能通过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 }  

 

以上是关于回文素数的判断,怎么更高效率判断素数的主要内容,如果未能解决你的问题,请参考以下文章

hdu-1431 素数回文

编程找出所有三位回文素数 用c语言

c语言中有没有比较简单的算法来判断两个集合有交集

如何用c语言编程判断一个数是否素数?

C语言程序设计C语言求回文素数!

算法15---数论6---素数,回文素数 分解质因素