C语言-判断一个数是否为素数

问题描述:判断一个数是不是素数

源代码:

第一版代码:

缺陷:

1、没有考虑1既不是素数也不是非素数。

2、for语句中,取值范围【2,n】太多了,没有必要。

#include<stdio.h>
int main (void)
{
    int i,n,sum=0;

    printf("**********************\n判断一个数是不是素数\n**********************\n素数概念:只能被1和本身整除\n\n");
    
    printf("请输入一个值:");
    scanf("%d",&n);
    
    for(i=2;i<n;i++){
        if(n%i==0){
        printf("\n%d能被%d整除\n",n,i);
        sum = sum+1;
        }
    }
    
    printf("\n%d能被%d个整数整除\n",n,sum);
    
    if(sum=0){
        printf("\n%d是素数",n);
    }else{
    
        printf("\n%d不是素数",n);
    }
    
    return 0;
 } 

第二版代码:

修复第一版缺陷:

1、添加n=1时候的情况判断。

2、在判断素数过程中,由于n不可能被大于n/2的数字整除,所以原先i的取值区间可缩小为【2,n/2】,数学上能证明,该区间可以是【2,根号n】。

#include<stdio.h>
int main (void)
{
    int i,n,sum=0;

    printf("**********************\n判断一个数是不是素数\n**********************\n素数概念:只能被1和本身整除\n\n");
    
    printf("请输入一个值:");
    scanf("%d",&n);
    
    for(i=2;i<n/2;i++){
        if(n%i==0){
        printf("\n%d能被%d整除\n",n,i);
        sum = sum+1;
        }
    }
    
    printf("\n%d能被%d个整数整除\n",n,sum);
    
    if(sum=0&&i!=1){
        printf("\n%d是素数",n);
    }else{
    
        printf("\n%d不是素数",n);
    }
    
    return 0;
 } 

第三版代码:

精简版代码:

只要判断是否是素数,其他不做输出,同时去掉sum变量。

#include<stdio.h>
int main (void)
{
    int i,n;

    printf("**********************\n判断一个数是不是素数\n**********************\n素数概念:只能被1和本身整除\n\n");
    
    printf("请输入一个值:");
    scanf("%d",&n);
    
    for(i=2;i<n/2;i++)
        if(n%i==0)  break;
    if(i>n/2&&n!=1)
        printf("\n%d是素数",n);
    else
        printf("\n%d不是素数",n);
        
    return 0;
 } 

运行结果:

判断素数第一二版代码
精简版判断素数

遇到问题:

1、printf("%d不是素数",n);这里的后面是“n”,不是“&n”,"&n"在scanf中实使用

2、判断素数还可以用break的方法。见上文第三版代码。

3、在判断素数过程中,由于n不可能被大于n/2的数字整除,所以原先i的取值区间可缩小为【2,n/2】,数学上能证明,该区间可以是【2,根号n】。

程序参数:

  • 输出大小: 149.033203125 KiB
  • 编译时间: 0.30s
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 当远程仓库切换了IP地址,就会发现pull和push失败,需要修改对应的IP地址。 1、找到新的仓库的地址 2、c...
    114105lijia阅读 597评论 0 0
  • 小时候,老师问我们长大后想干什么? 天真浪漫的我们总是回答说, 老师,我长大了要当科学家!...
    奔跑的小胖子zzzz阅读 126评论 0 4
  • 儿子睡下了。 睡前,征求他的意见:明天早上想吃什么?西红柿挂面还是菠菜挂面? 儿子很愤慨:你还不如问我是吃挂面呢,...
    青简书阅读 140评论 0 1
  • 小雨中,我辞别上海,到达扬州,去看望在那里工作的外甥。原本说给发个位置就行,我自己打车过去,他偏要冒着雨来接,说是...
    海月先生阅读 1,450评论 1 5