C语言素数

求1-10000之间的素数,并打印出来。

使用了sbrk和brk函数,采用直接操作内存的方式,尽量减少循环次数,每次进行素数判断仅与之前的素数进行相除。该代码并不健壮,仅作练习用。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int *p;

int    Primer(int a,int *size);
main()
{
    int a=10000;
    int size;
    p=sbrk(0);
    Primer(a,&size);
    int i=0;
    for(;i<size;i++)
    {
        printf("%d\n",p[i]);
    }
}

int    Primer(int a,int *size)
{

    int i=0;
    int *r;
    int sizePr;
    if(a<4)
    {
        *size=a;
        r=p;
        for(;i<a;i++)
        {
            brk(r+1);
            *r=i+1;
            r=sbrk(0);
        }
    }
    else
    {
        Primer(3,&sizePr);
        int j=4;
        for(;j<=a;j++)
        {
            int si=1;
            r=&p[sizePr];
            int c=0;
            for(;si<sizePr;si++)
            {
                if(j%p[si]==0)
                {
                    c=1;
                    break;
                }
            }
            if(c==0)
            {
                brk(r+1);
                *r=j;
                r=sbrk(0);
                sizePr++;
            }
        }
        *size=sizePr;
    }
    printf("Primer:%p\n",p) ;
    return 0;
}
时间: 2024-08-25 07:51:27

C语言素数的相关文章

c语言 素数

上个学期学了c语言,但是没有学好.而且平时一直在电脑上练习,导致c语言一直没有掌握好,最近我一直迫切的想要学一些东西,于是便从头开始.关于素数一直是我的心魔.因为我一直以为这个很简单,但是在考计算机二级的时候我竟然栽在这个上面了   于是今天我编了一下    但很奇怪的是我在DEV++上编的时候出现了bug   我少打一个\n他就报错   我也不知道是怎么回事! 又用了另一种方法   这回有没有\n都不会报错了   真出bug了吗?

[程序设计入门—C语言] 素数和

题目内容:http://mooc.study.163.com/learn/ZJU-1000002011#/learn/ojhw?id=1000052000 我们认为2是第一个素数,3是第二个素数,5是第三个素数,依次类推. 现在,给定两个整数n和m,0<n<=m<=200,你的程序要计算第n个素数到第m个素数之间所有的素数的和,包括第n个素数和第m个素数. 输入格式: 两个整数,第一个表示n,第二个表示m. 输出格式: 一个整数,表示第n个素数到第m个素数之间所有的素数的和,包括第n个素

C语言 素数平方之和

方法一: #include<stdio.h> #include<math.h> double fun(int m) { int n,i,k; double s =0.0; for(n=3;n<=m;n++) { k = sqrt(n); for(i=2;i<=k;i++) if(n%i==0) break;    //如果n为合数,结束这一层for循环 if(i>=k+1) s += sqrt(n);  //i一直不能被n除尽,则n为素数 } return s;

C语言最优化求素数

初学C语言,看到求素数的代码,不是太满意,自己设计了一个计算流程图.在贴吧里也问了一下,和"埃拉托色尼(Eratosthenes)筛法”有些撞车,当然在下不敢与数学巨匠们争长短,不过还是想自己试一下. 百度了一下有人已经用这类方法做了代码,不过和我的想法有出入. 思路: 1要避免冗余的求余计算的计算次数,这样在数字足够大的时候更能体现更高的计算效率, 1)分母排除偶数,可以减少一半的计算量.具体做法是改+1递增为从第二个素数3开始+2递增; 2)筛选求余计算的分子,而根据素数的定义,只要不被小于

C语言打印100 ——200之间的素数

根据素数定义,只能被1和它本身整除的自然数为素数.利用定义可以循环判断该数除以比它小的每一个自然数(不包括1),如果都不能整除,则这个数就是素数. 由于上述方法效率太低,对此方法进行优化.我们都知道偶数一定不是素数,那只求剩余一般的数.如果一个数是合数,那么它的最小质因数肯定小于等于他的平方根,由合数定理可进一步优化,只需要循环判断该数除以比它的平方根小的每一个自然数(大于1)即可. C语言代码如下: #include<stdio.h> #include<math.h> int m

c语言实现判断一个数是否是素数

就是判断一个数是否是素数,网上很多版本,我觉得都有点问题,今天一个朋友问我这个问题,我才知道,现在我就贴出自己的代码,很有用哦!! #include<stdio.h> #include<math.h> int Prime(unsigned int a) { unsigned int i; int k=0; if (a==1) k=1; else for(i=2;i<sqrt(a);i++) if(a%i==0) { k=1; break; } return k; } int

水仙花数&amp;素数&amp;质因数分解的C语言实现

最近,我翻了一下之前的C语言教材,看了三个有意思的小程序,包括:寻找"水仙花数".判断某数是否为素数.对一个数进行质因数分解.我想把这三个东西放到一个程序中,便写下了此文. 算法步骤 1. 寻找"水仙花数". "水仙花数"是指一个三位数,其各位数字的立方和等于该数本身.例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方. 2. 判断某数是否为素数. 素数是指只能被1和它本身整除的数,判断一个数是否为

一起talk C栗子吧(第八回:C语言实例--素数)

各位看官们,大家好,从今天開始.我们讲大型章回体科技小说 :C栗子,也就是C语言实例. 闲话休提, 言归正转. 让我们一起talk C栗子吧! 看官们.上一回中咱们说的是进制转换的样例,这一回咱们说的样例是:素数. 素数又叫质数,在大于1的自然数中.假设一个正整数除了1和它本身外.不能被其他自然数整除.那么这 个数就是一个素数.素数比較多.所以咱们样例中仅仅展示从1到100这个范围内的素数. 看官们认为这个样例算是简单.我也认为比較简单.仅仅要把范围内的数从头到尾遍历一下,推断能否被 除1和自身

C语言打印100—200之间的素数

质数(prime number)又称素数,有无限个.一个大于1的自然数,除了1和它本身外,不能整除以其他自然数(质数),换句话说就是该数除了1和它本身以外不再有其他的因数:否则称为合数.  根据算术基本定理,每一个比1大的整数,要么本身是一个质数,要么可以写成一系列质数的乘积:而且如果不考虑这些质数在乘积中的顺序,那么写出来的形式是唯一的.最小的质数是2. 目前为止,人们未找到一个公式可求出所有质数. C语言代码如下:     # include <stdio.h> int main()