C语言求素数

#include<stdio.h>
int main()
{
int a, b, t, i;
scanf_s("%d", &a);
i = 3; //i 与 t必须赋值,否则循环中任意判断语句没有符合条件则i 或t没有任何合法值,导致循环完成后的判断语句出错
t = 4;
for (b = 2; b < a; b++) //从2开始(素数只能被1 和它本身整除),并且小于它本身的数,从2开始循环一直到它本身-1的数都去求余数
{
if (a%b == 0) //求余数(不能被整除的数都有余数),判断输入数字是否能被整除,能整除,余数就为0,该数就不是素数
{
i = 0;
}
else //只有满足这个条件的数才是素数,该语句表示从1开始到它本身减1的数都不能整除它
{
t = 1;
}

}
if (t == 1 && i == 0) //判断循环中两个语句是否都执行,被大于1 小于它本身的数整除,那么该数就不是素数
printf("%d:该数不是素数\n", a);
else
printf("%d:该数是素数\n", a);
getchar();

return 0;
}
求大神帮我看看这程序写得还有什么问题么,我看很多人都用sqtr求出平方根,这样做是什么意思?我一直没搞清楚是什么目的

第1个回答  2013-10-25

。。。 求素数是个简单的问题, 你写的可不简单!

include <stdio.h>

int main(void)
{
        int a, i;

        scanf("%d", &a);

        for (i = 2; i * i <= a; i++) {
                if (a % i == 0) {
                        printf("%d: not a prime", a); 
                        return 0;
                }   
        }   
        printf("%d: is a prime", a); 
        return 0;
}

 1. 用 i * i <= a 节俭循环次数。

2. 一旦检查到此数不是素数就没必要再循环下去,直接 return 0

追问

大神, return 0 我一直不知道什么意思 ,我只知道别人写程序都有这个,我自学的C语言,才5 6天,能指导下么

追答

return 0; 就是退出 main 函数,并返回 0 ;
main 函数的返回值比较特殊,操作系统通过这个 返回值来判断你的程序是否运行正常,0 代表正常。

追问

我试了 我VC2008 输入一个数字就一闪没了,而且我光标运行到最后一行代码的时候也是,就是输出 这个数是素数这里 而VC6.0 没有 它自己会暂停 这个能告诉怎么弄么

追答        printf("%d: is a prime", a); 
        getchar();
        return 0;

加个 getchar 来停止,按任意键退出


    不能用 break,用break 的话   printf("%d: is a prime", a);  这句总被执行

    必须是 i * i <= a; 比如 a 等于 9 , 如果是 i * i < a; 那么 i 到 2 就停止循环了,结果错误

追问

停住了,不怎么管用,必须要运行光标处 不过我还是没明白你 i*i的意思 如果真是a =6 循环的话怎么 i*i = 2*2<=6 if是怎么判断的? 为什么会判断为 6%4=0?

本回答被提问者采纳
第2个回答  2020-02-19
第3个回答  2013-10-25
sqtr 是开方的意思 sqrt(9)他计算出结果就是三 具体是这样的变量b=sqrt(变量a) 头文件是#include <math.h>