该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
#include
#include
#define TRUE 1
#define FALSE 0
typedef int Bool;
typedef int Integer;/*便于需要时扩展成更大的整数类型*/
#define STRINT "%d"
Bool is_prime(Integer n);
Integer next_prime(Integer n);
Integer modpower(Integer p, Integer q);
/*
*作者:star
*时间:2010-01-19
*/
main(){
Integer n = 2, next;
for(;;){
next = next_prime(n);
if((modpower(n, next) - n) % next == 0){
printf(STRINT, n);
printf("\n");
printf(STRINT, next);
printf("\n");
}
n = next;
}
getch();
return 0;
}
/*素数判断,只能判别大于1的数*/
Bool is_prime(Integer n){
Integer i = 2;
while(i * i <= n){
if(n % i == 0){
return FALSE;
}
i++;
}
return TRUE;
}
/*求n后的第一个素数*/
Integer next_prime(Integer n){
Integer next;
next = (n % 2 == 0 ? n + 1 : n + 2);
for(;;next += 2){
if(is_prime(next) == TRUE){
break;
}
}
return next;
}
/*求p的P次方除以q的余数,默认p < q*/
Integer modpower(Integer p, Integer q){
Integer i, result = 1;
for(i = 0; i < p; i++){
result = (result * p) % q;
}
return result;
}