最簡單的方法就是2到n-1去除n,
若能被整除,那就不是質數。
但在實作上不會這麼笨,只要從2到√n就可以了。
因為如果n是合數,n就可以拆成2個數字,
而其中一個數字,會<=√n。
/* ACM 10235
* mythnc
* 2011/10/15 13:29:01
* run time: 0.012
*/
#include <stdio.h>
#define PRIME 1
#define NOT_P 0
int prime(int);
int reverse(int);
int main(void)
{
int n;
while (scanf("%d", &n) != EOF) {
if (prime(n))
if (reverse(n))
printf("%d is emirp.\n", n);
else
printf("%d is prime.\n", n);
else
printf("%d is not prime.\n", n);
}
return 0;
}
/* prime: judge n is prime or not */
int prime(int n)
{
int i;
if (n == 2) /* 2 is prime */
return PRIME;
if (n % 2 == 0) /* even is not prime */
return NOT_P;
for (i = 3; i * i <= n; i++)
if (n % i == 0)
return NOT_P;
return PRIME;
}
/* reverse: return prime(the reverse n) */
int reverse(int n)
{
int x, tmp;
tmp = n;
x = n % 10;
while ((n /= 10) > 0) {
x *= 10;
x += n % 10;
}
if (x == tmp) /* if reverse n is the same n */
return 0; /* can't output emirp */
return prime(x);
}
沒有留言:
張貼留言