判断素数
- 规划:(伪代码)
提示用户输入数字;
当scanf()返回值为1;
分析该数并报告结果;
提示用户继续输入. - 设计如何找出素数:
for (div = 2; div < num; div++)
if(num % div == 0)
printf("%d is divisible by %d\n",num , div);
该循环检查2到num之间的所有数,判断他们是否为num整除.但是这个方法过于浪费时间. - 改进方法:
例如:如果考虑144,它的约数有2和72,3和48,4和36,6和24,8和18,9和16,12和12,16和9,18和8等等,再找到12和12这一对约数以后,又开始得到已经找到的约数(只不过是次序相反).因此,不用循环到143,在达到12
就可以停止循环.这大大节省了时间.
for (div = 2; (div*div)<=num; div++)
if(num % div == 0)
printf("%d is divisible by %d and %d\n",num , div ,num/div); - 如何知道这个数字是素数?如果num是素数,程序不会进入if语句.要解释这个问题,可以在外层循环把一个变量设置为某一个值(如:1),然后在if语句中把该变量重新设置为0;循环完成后,检查该变量的值是否为1,如果事,说明没有进入if语句,那么该数就是素数.这样的变量通常称为***标记***.
- 标记的使用:
for循环结束以后,使用if判断isprime的值是否为true,如果还是true,则该数就是素数