首先, 你要搞清楚素数的定义:
质数,又称素数,指在大于1的自然数中,除了1和此整数自身外,无法被其他自然数整除的数。
来源: http://zh.素数
所以验证一个数n是不是素数的基本方法, 就是用所有[2,n-1]范围内的数去试除, 如果能整除, 说明这个数不是素数, 如果所有的数都不能整除, 那么这个数就是素数
然后看C语言如何验证a是否可以被b整除, 这个你是知道的, 就是
if (a % b == 0) { ... }
接下来是要用到循环了, 这个看来对你也不是问题
程序代码:
for (i = 2; i < n - 1; ++i)
{
if (n % i == 0)
{...}
}
你的程序的主要问题, 在于对判断逻辑的处理
素数的要求是, 所有[2,n-1]范围的数都不能整除, 也就是说, 只要有任何一个数能整除, n就不是素数
对于这种类型的问题, 一般用一个变量来记录判断的结果
程序代码:
int is_prime = 1;
for (i = 2; i < n - 1; ++i)
{
if (n % i == 0)
{
is_prime = 0;
break;
}
}
最主要的思想就是:
你在循环体里面, 只能确定判断出一个数
不是素数, 但无法确定一个数
肯定是素数
只有当所有不是素数的判断都失败了, 才能确认这个数是素数
现在可以通过判断is_prime这个变量的值, 来确定n是不是素数了
程序代码:
if (is_prime == 0)
{
printf("%d 不是素数\n", n);
}
else
{
printf("%d 是素数\n", n);
}
至此, 判断素数的基本方法已经完成, 完整的程序就需要你自己来完成了
但是要注意上面的程序还有很多可以改进的地方, 比如:
1. 判断素数这是一个独立的功能, 可以封装成一个函数, 这样以后修改的时候, 会方便很多
2. 实际上不需要试除[2,n-1], 只要试除[2,sqrt(n)]就可以了
最后, 是关于效率的问题, 这需要具体问题具体分析, 得知道数据规模和可用资源, 才能确定一种最优的办法, 这就不是几十页纸能讲清楚的了, 如果感兴趣的话, 可以求助Google大神