Linux编程基础之打印出最近找到的素数

前言

操作系统:Fedora
要求:编写一个程序,实现这样的功能:搜索2~65535之间所有的素数并将其保存到数组中,用户输入^C信号时,程序打印出最近找到的素数。
本文为作者班级作业,同班同学参考借鉴的话,别直接拿本文的截图和代码交差啊 : )

代码

sigdemo.c 文件代码如下

#include <unistd.h>
#include <signal.h>
#include <stdio.h>
#include <sys/types.h>
int i=1,a[30000],j=0;
void sigHandler(int signalNum){
        printf("最近找到的素数:%d\n",a[j-1]);
}
int isPrime(int n){ //判断n是否是素数
   if( n==1 ) return 0;
   if( n!=2&&n%2==0 ) return 0;  //排除 除2以外 的偶数,减少计算量
   for(int i=3; i*i<=n; i++)
      if( n%i == 0) return 0;
   return 1;
}
int main(){
        signal(SIGINT,sigHandler);
        while(i<=65535){
                if(isPrime(i)) a[j++]=i;
                i++;
                usleep(1000);
        }
        return 0;
}

执行结果

(修改了一个小错误,以下为用 wsl 重新执行的结果)

代码解释

signal()

signal(SIGINT,sigHandler);

当用户输入^C之后,程序并不退出,而是执行 sigHandler()函数,输出最近找到的素数。

usleep()函数

usleep(1)的作用: 休眠 1 微秒,即十的负六次方秒,十的负三次方毫秒
这样可以让找素数的过程慢一点,不至于还没输入 ^C 信号 就把所有素数找完了

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

huazi-J

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值