| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 813 人关注过本帖
标题:c和指针习题四: 求素数的题目
只看楼主 加入收藏
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
结帖率:99.76%
收藏
已结贴  问题点数:30 回复次数:7 
c和指针习题四: 求素数的题目
程序代码:
#include <stdio.h>
/*
  c和指针习题四:
  质数就是只能被1和本身整除的整数,Eratosthenes筛选法是一种计算质数的有效方法
  这个算法的第一步就是写下所有从2至某个上限的所有整数。在算法的剩余部分,你遍
  历整个列表,并剔除所有不是质数的整数。以下省略N字。
  编写一个程序,实现这个算法使用数组表示你的列表,每个数组元素的值用于标记对应
  的数是否已经剔除,开始时数组所有元素都设置为true,当算法要求剔除该元素时,就
  把这个元素设置为false。
  要求:你可以使用下标来标记指向数组首元素和数组尾元素的指针,但应该使用指针来
  访问数组元素。
*/
//我设计的一个子函数,用于能够查找第N个TRUE的数组下标
int count_true(bool source[],int n,int sz_len)
{
    int ret=-1;
    bool *p_begin=source;
    for(int i=0;i<sz_len;i++)
    {
        if(*p_begin==true) ret++;
        if(ret==n)
        {
            return i;
        }
        p_begin++;
   
    }
    return -1;
}


int main(void)
{
    //数组元素代表的是 2..101;对应数组下标分别为i+2
    bool source[100];
    for(int i=0;i<100;i++) source[i]=true;
    int len=sizeof(source)/sizeof(source[0]);
    bool *p_begin=source;
    bool *p_begin2=source;
    bool *p_end=source+len;
    int first=0;
    int c_t=0;
    while(first!=-1)
    {
        int second=first+1;  //从下一个true的下一个元素开始删除
        p_begin+=second;
        while(*p_begin<*p_end)
        {
            if ((second+2)%(first+2)==0) *p_begin=false; //用于删除非素数元素
            second++;
            p_begin++;
        }
        p_begin=p_begin2;
        first=count_true(source,c_t++,len); //查找下一个true
    }
    for(i=0;i<len;i++)
    {
        if(source[i]==1) printf("%4d",i+2);

    }
    return 0;
}
搜索更多相关主题的帖子: 元素 
2012-12-02 11:47
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:6 
你不用每道题都发出来吧

总有那身价贱的人给作业贴回复完整的代码
2012-12-02 11:49
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:6 
额,虽然你把题目和源文件都发出来了,但是....要我们做什么呢...

I have not failed completely
2012-12-02 12:02
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:6 

自己不好过,也不让别人好过
唉,我试试。。。


[fly]存在即是合理[/fly]
2012-12-02 12:08
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
以下是引用神龙赖了在2012-12-2 12:02:28的发言:

额,虽然你把题目和源文件都发出来了,但是....要我们做什么呢...
随意,海阔天空

DO IT YOURSELF !
2012-12-02 12:38
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
如果有可能的话  大牛们也贴一下 你们的代码

借鉴一下

DO IT YOURSELF !
2012-12-02 12:44
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:6 
这算是散分吗?

有什么好的算法发出来不错,不过这个算法不怎么样啊

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2012-12-02 12:59
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:6 
如果用数组这个数据结构 要设置一个标志位 当遇到合数时要就置FALSE
这样每次筛选时还要和每次已经确定的合数进行一次比较(TRUE or FALSE?)
如果用链表就直接把这个合数结点给删除了 我想应该要快点。

梅尚程荀
马谭杨奚







                                                       
2012-12-02 15:05
快速回复:c和指针习题四: 求素数的题目
数据加载中...
 
   



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

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