// 24写一个函数,判断某个数是否为素数,以及求1-1000之内的素数.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>
#include <cmath>
using namespace std;
bool isprime(int);
int main()
{
for (int i = 2; i <= 1000; i++)
{
if (isprime(i))
cout << " " << i;
}
}
bool isprime(int k)
{
float m;
m = sqrt(float(k));
for(int i = 2; i<=m; i++ )
{
if (k % i == 0)
return false;
}
return true;
}
k为想要判断是否为素数的数,k%i为判断k是否可被i整除,sqrt()函数为开平方函数,在此为缩小判断范围,因为判断素数只需从2判断到开根号是否可整除
该程序的作用是素数
isprime中的k是传入的参数是要求的素数值,sqrt是对k开平方根,然后求2--m范围内k能否被整除,整除则这个数K不是素数,否则为素数,返回true
卖main函数打印素数
素数判断就是看有没有除了1和它本身之外的数能够整除它,如果有,它就不是素数。
sqrt是求正平方根。
18行这个函数就是来判断素数的,题目说要输出1到1000之内的素数,于是主函数来了一个从2到1000的循环,k就是这2到1000的数的传入函数的参数。
k%i==0就是判断k是否能被i整除。
1.关于k:
主函数的i和isprime函数中的k一样
就是i是实参,k是形参。
2.关于对sqrt(k)的解释:(这一部分主要看isprime函数)
sqrt其实是做了优化
因为如果k能被 2 ~ m 之间任一整数i整除(取余为0)
其二个因子必定有一个小于或等于sqrt(k) ,另一个大于或等于sqrt(k)。
如果数k不是素数,则还有其他因子,其中的因子,假如为a,b.其中必有一个大于sqrt(k) ,一个小于sqrt(k) 。所以必有一个小于或等于其平方根的因数,那么验证素数时就只需要验证到其平方根就可以了。即一个合数一定含有小于它平方根的质因子。
以上仅供参考,如有任何疑问,可以评论回复,看到即回。
希望对题主有所帮助!可以的话,点个采纳!