一、求质数
写一个函数int prime(int x),如果x是素数返回值为1,否则返回0。
#include <stdio.h>
int g_nAdd = 3;
// 2 3 5 7 11 13 17 19
// 2~sqrt(n)
int prime(int n)
{
int nTemp = n;
if (n == 2 || n == 3)
{
return 1;
}
// 奇偶判断过滤偶数和0,1
if ((n % 2 == 0) || (n < 2))
{
return 0;
}
// 从3开始的奇数(除掉奇数n),如果能够被n整除,则n不是奇数
((nTemp = nTemp % g_nAdd) == 0) || ((g_nAdd += 2) == n) || (nTemp = prime(n));
return (nTemp == 0) ? 0 : 1;
}
int main()
{
int n = 0;
while (1)
{
g_nAdd = 3;
printf("please input n:\r\n");
scanf("%d", &n);
printf("%d is prime? %s\r\n\r\n", n, prime(n) == 0 ? "false" : "true");
}
getchar();
return 0;
}
改个接口就不用定义全局变量了。
int _prime(int n, int nAdd)
{
int nTemp = n;
if (n == 2 || n == 3)
{
return 1;
}
// 奇偶判断过滤偶数和0,1
if ((n % 2 == 0) || (n < 2))
{
return 0;
}
// 从3开始的奇数(除掉奇数n),如果能够被n整除,则n不是奇数
((nTemp = nTemp % nAdd) == 0) || ((nAdd += 2) == n) || (nTemp = _prime(n, nAdd));
return (nTemp == 0) ? 0 : 1;
}
int prime(int n)
{
return _prime(n, 3);
}
二、求阶层
不适用条件判断语句和循环语句以及?:表达式求阶层
int factorial(int n)
{
int nTemp = n;
(nTemp == 1) || (nTemp = n * factorial(n - 1));
return nTemp;
}