刚学 C 语言的新手,是不是一听到要写素数程序就头大?拿到题目盯着屏幕半天,不知道从哪儿开始敲代码;好不容易写出来几行,要么编译报错,要么运行结果乱七八糟。其实啊,素数程序没那么难,今天兔子哥就把它拆成 3 步,一步步教你写,保证高效又好懂,新手也能轻松学会,一起往下看吧!
第一步:先弄明白啥是素数,判断逻辑是啥
写程序前,得先知道素数到底是啥。素数就是那些大于 1 的整数,除了 1 和它自己,再也没有别的数能整除它。比如说 2、3、5、7 这些都是素数;像 4 能被 2 整除,6 能被 2 和 3 整除,就不是素数。
那怎么让电脑判断一个数是不是素数呢?逻辑很简单:拿这个数 n,从 2 开始试除,一直试到比它小的数。如果中间有哪个数能把 n 整除,那 n 就不是素数;要是试到最后都没有,那 n 就是素数。
可能有新手会问,试除的时候非得从 2 试到 n-1 吗?当然不用,这也是后面要讲的优化点,但刚开始学,先把这个基础逻辑记牢再说。
第二步:搭好程序框架,写出基础代码
知道了判断逻辑,接下来就可以搭程序框架了,新手可以跟着一步步写:
- 包含头文件,写主函数
任何 C 语言程序都得有头文件和主函数,素数程序也一样。先写:
c运行#includeint main() {// 后面的代码放这里return 0;}
这就像盖房子先打地基,必须得有。 - 定义变量,接收用户输入
咱们需要一个变量存用户输入的数,比如叫 num,再用 scanf 接收输入:
c运行int num;printf("请输入一个整数:");scanf("%d", &num);
这里要注意,scanf 里的变量前一定要加 &,不然电脑收不到输入的数,新手很容易忘这个。 - 写判断素数的核心代码
先处理特殊情况:小于等于 1 的数肯定不是素数。然后用循环试除:
c运行int is_prime = 1; // 先假设是素数,1表示是,0表示不是if (num <= 1) {is_prime = 0;} else {for (int i = 2; i < num; i++) {if (num % i == 0) { // 能被i整除,不是素数is_prime = 0;break; // 不用再试了,跳出循环}}} - 输出结果
最后根据 is_prime 的值,告诉用户结果:
c运行if (is_prime == 1) {printf("%d是素数\n", num);} else {printf("%d不是素数\n", num);}
把这些拼起来,一个基础的素数程序就成了。新手刚开始写的时候,不用急着一次性写完,可以一段一段写,每写一段就编译一下,没问题了再写下一段。
第三步:优化代码,让程序跑得更快
上面的基础代码能实现功能,但如果输入的数很大,比如 100000,程序会跑很久。这时候就得优化了,新手也能学会的两个优化方法:
- 缩小循环范围
一个数 n 如果有因数,那么其中一个因数肯定小于等于它的平方根。比如 36 的平方根是 6,它的因数 2、3、4、6 都不超过 6。所以循环不用跑到 n-1,跑到平方根就行:
c运行for (int i = 2; i * i <= num; i++) { // 这里改成i*i <= num
这样循环次数能少很多,程序自然快了。 - 排除偶数
除了 2 之外,所有素数都是奇数。所以可以先判断 num 是不是 2,如果不是偶数,就只试除奇数:
c运行if (num == 2) {is_prime = 1;} else if (num % 2 == 0) { // 偶数直接不是素数is_prime = 0;} else {for (int i = 3; i * i <= num; i += 2) { // i从3开始,每次加2if (num % i == 0) {is_prime = 0;break;}}}
优化前后对比:
| 方法 | 计算 100003 的循环次数 | 大概耗时 |
|---|---|---|
| 基础方法 | 100001 次 | 3 秒 |
| 优化后 | 约 158 次 | 0.1 秒 |
是不是快多了?新手可能觉得优化很难,其实就这几招,多练两次就会了。
新手常遇到的问题及解决
- 编译时提示 “未声明的标识符 i”:这是因为在老版本的编译器里,不能在 for 循环里定义 i,解决办法是在循环外定义:
int i; for(i=2;...)。 - 输入 1,程序说它是素数:忘了处理 num<=1 的情况,加上前面的判断就行。
- 程序运行后一闪就没了:在 return 0 前加一句
system("pause");,再加上#include头文件。
兔子哥刚开始写素数程序的时候,光那个循环范围就错了好几次,要么跑太多次卡得不行,要么范围太小判断错。后来才明白,写程序不怕错,错了改就是了,改着改着就会了。
其实啊,素数程序是新手练手的好例子,能学到循环、条件判断、函数这些基础知识。这 3 步方法看起来简单,但只要跟着做,保证你能写出能跑、还高效的素数程序。别害怕,现在就打开编译器试试,你会发现没想象中那么难!
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~