| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 716 人关注过本帖
标题:关于判断质数与合数的C语言编程代码的优化讨论
只看楼主 加入收藏
半夏雨巷
Rank: 2
等 级:论坛游民
威 望:1
帖 子:13
专家分:17
注 册:2015-3-18
结帖率:0
收藏
已结贴  问题点数:5 回复次数:8 
关于判断质数与合数的C语言编程代码的优化讨论
本人编了一个判断质数与合数的程序:
#include"stdio.h"
main()
{  int i,n,count1=0,count2=0;
   printf("请输入要查询(大于1)的整数:");
   scanf("%3d\n",&n);
   if(n==2)
      printf("输入的是质数\n");
   else
      {  for(i=2;i<=(n+1)/2;i++)
         {
            if(n%i==0)
             {
               count1++;
               printf("输入的是合数\n");
               break;
             }     
            else
              count2++;
          }
         if(count2>count1)
         printf("输入的是质数\n");
      }
}
这个程序能够正确执行,希望哪位高手细细品味后能给出更加简洁高效的程序。

[ 本帖最后由 半夏雨巷 于 2015-3-21 17:14 编辑 ]
搜索更多相关主题的帖子: include C语言 
2015-03-18 12:02
执笔画江山
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:3
帖 子:265
专家分:1010
注 册:2015-1-13
收藏
得分:2 
程序代码:
#include <stdio.h>
int isPrime(int num )
{
    int i;
    //从2开始循环,一直到i的平方小于等于给定的数。
    for (i = 2; i*i <= num; i++)
    {
        if ( num % i == 0 )
        {
            return 0;
        }
    }
    return num;
}
int main(int argc, const char *argv[])
{
    int ret;
    int i;  
    for( i = 2; i < 200; i ++)
    {
        ret = isPrime(i);
        if(ret == 0)
        {
            continue;
        }
        printf("%d ",i);
    }
    printf("\n");
    return 0;
}


这是一个判断是不是质数的,质数都出来了,合数也就出来了。多加个打印就是了。

授人以鱼,不如授人以渔
2015-03-18 12:37
半夏雨巷
Rank: 2
等 级:论坛游民
威 望:1
帖 子:13
专家分:17
注 册:2015-3-18
收藏
得分:0 
回复 2楼 执笔画江山
我是在吸收不同的思路争取代码简洁,开阔思路.谢谢喽
2015-03-18 12:46
执笔画江山
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:3
帖 子:265
专家分:1010
注 册:2015-1-13
收藏
得分:0 
回复 3楼 半夏雨巷
从效率来说  函数肯定最好。这个是经典例子  你可以当做典范。

授人以鱼,不如授人以渔
2015-03-18 13:06
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:2 
据说 筛选法是最快的

DO IT YOURSELF !
2015-03-18 13:07
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:2 
昨天做质数表的初始化函数

程序代码:
unsigned ans[COUNT] = { 0, 2, 3, 5, 7, 11, 13, 17, 19 };

/*

 * 初始化质数表

 */
void InitArray()
{
    int length = 9;
    unsigned i, n;

    for (n = 23;length < COUNT;n += 2)
    {
        bool flag = true;
        for (i = 1;ans[i] * ans[i] <= n;i += 1)
        {
            if (n % ans[i] == 0)
            {
                flag = false;
                break;
            }
        }
        if (flag)  ans[length++] = n;
    }
}



[ 本帖最后由 azzbcc 于 2015-3-18 16:08 编辑 ]


[fly]存在即是合理[/fly]
2015-03-18 16:07
半夏雨巷
Rank: 2
等 级:论坛游民
威 望:1
帖 子:13
专家分:17
注 册:2015-3-18
收藏
得分:0 
回复 6楼 azzbcc
这个程序是什么意思,有点没有看懂!
2015-03-18 16:51
半夏雨巷
Rank: 2
等 级:论坛游民
威 望:1
帖 子:13
专家分:17
注 册:2015-3-18
收藏
得分:0 
回复 5楼 wp231957
我奥特了,能给举个例子说说筛选法莫?
2015-03-18 16:52
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:2 
回复 8楼 半夏雨巷
程序代码:
#include <stdio.h>
#include <math.h>

void filter(int [], int);

int main(void) {
    int i = -1, x, y;
    printf("查找某个整数区间内素数 (下限x>=2 上限y>=x) : ");

    if(scanf("%d%d", &x, &y) != 2 || x < 2 || x > y) return 1;

    int len = y - x + 1;

    int num[len];

    while(++i < len) num[i] = x + i;

    filter(num, len);

    for(i = 0; i < len; i++)
        if(num[i]) printf("%d ", num[i]);

    printf("\n");

    return 0;
}

void filter(int num[], int len) {
    int i, j, k;

    for(i = 0; i < len; i++) {
        if(!num[i]) continue;

        for(j = 2; j <= sqrt(num[i]); j++) {
            if(num[i] % j == 0) {
                for(k = 0; j * k <= sqrt(num[i]); k++) {
                    num[i + j * k] = 0;
                }
            }
        }
    }
}

Only the Code Tells the Truth             K.I.S.S
2015-03-18 18:55
快速回复:关于判断质数与合数的C语言编程代码的优化讨论
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023280 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved