菜鸟学习C语言的一道习题求解答

来源:百度知道 编辑:UC知道 时间:2024/05/22 18:55:47
例题是这样的:
例 1.5.2 对一个大于或等于3的正整数,判断它是不是一个素数。
解 所谓素数,是指除了1和该数本身之外,不能被其他任何整数整除的数,例如,7是
素数,因为它不能被2,3,4,5,6整除。
判断一个数n(n≥3)是否为素数的方法是:将n作为被除数,将2到n-1各个整数轮
流作为除数,如果都不能整除n,则n为素数。
算法表示如下:
S1:输入n的值;
S2:2=>i(i作为除数);
S3:n被i除,得余数r;
S4:如果r=0,表示n能被i整除,则打印“n不是整数”,算法结束;否则执行S5;
S5:i+1=>1
S6:如果i≤n-1,返回S3;否则打印“n是素数”,算法结束。
此算法虽然是正确的,但还可以改进,使运行效率更高。请自行修改

我的做法是这样的:
S1:输入n的值;
S2:2=>i≤n-1(i作为除数);
s3:i+1>1
s4:n被i除,得余数r;
s5:如果r=0,表示n能被i整除,则打印“n不是整数”,算法结束;否则打印“n是素数”,算法结束。

请高手指点一下, 我做得对不对,如果不对的话错在什么地方呢?
本人中学水平,第一次学习C语言。希望高手指点一下。
如果可以的话,希望高手能给个正确答案,谢谢了。
..最重要的忘了说了.要用自然语回答.

#include"stdio.h"
p(n)
{
int i;
for(i=2;i<=n/1;i++)
if(n%i==0)return 0;
else return 1;
}

main()
{
int n;
scanf("%d",&n);
if(p(n))printf("yes");
else printf("no");
getch();
}

main()
{int i,n;
scanf("%d",&n);
for(i=2;i<n;i++)
if(n%i==0) printf("n不是素数!")
else
printf("n是素数!")
}

这个程序算法的改进只能再循环的次数少上改进了,别的地方不能再动了.
可以把循环次数的条件改为i<n/2,或者i<n^1/2

1. 事先最好对n的值做个检查,至少要求大于1吧
2. 可以这样判断整除: if (n / i * i == n) ...
或者 if (n % i == 0) ...