| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 757 人关注过本帖
标题:linux环境下求孪生素数的代码错误
只看楼主 加入收藏
qq472739119
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2017-1-1
结帖率:75%
收藏
 问题点数:0 回复次数:0 
linux环境下求孪生素数的代码错误
程序代码:
#include <stdio.h>
#include <unistd.h>
int isPrimer(int i)
{
    int j;
    for(j = 2;j <= i;++j){
       if( i % j==0)
           break;
    }
    if(i==j)
       return 1;
    else
       return 0;
}

int isTwinPrimer(int a,int b)
{
    if((b-a)== 2)
        return 1;
    return 0;
}

main()
{
    int *p1=sbrk(0);
    int *r1=p1,*r2=p1,*p2=p1;
    int i ,j,k = 1;
    for(i= 1;i<=100;++i)
    {
        if(isPrimer(i)){
            brk(r1+ 1);
            *r1 = i;
            r1 = sbrk(0);
        }
    }
    r1=p1+1;
    p2=sbrk(0);
    r2=p2;
    while(r1!=sbrk (0))//这行代码好像陷入了无限循环,但是如果改成r1!=p2,就会正确的计算下去。请问各位大神是什么问题?
    {
        if(isTwinPrimer(*(r1-1),*r1))
        {
            brk(r2+1);
            *r2=*(r1-1);
            r2=sbrk(0);
            brk(r2+1);
            *r2=*r1;
            r2=sbrk(0);
        }
        ++r1;
    }
    r2=p2;
    while(r2!=sbrk(0))
    {
        printf("%d ",*r2);r2=r2+1;printf("%d\n",*r2);++r2;
    }
    brk(p2);
    brk(p1);
    return 0;
}
~      
代码表示的是再linux环境下,利用brk和sbrk内存管理语句进行计算100以内的孪生素数。代码中标注的位置好像在linux环境下变成了无限循环,求教各位的大神是怎么回事儿?
搜索更多相关主题的帖子: linux return 
2017-04-07 14:35
快速回复:linux环境下求孪生素数的代码错误
数据加载中...
 
   



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

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