设为首页 加入收藏

TOP

C语言求素数(质数)的算法
2015-02-02 16:28:41 来源: 作者: 【 】 浏览:13
Tags:语言 素数 质数 算法

前言


1,小学生版本:


判断 x 是否为质数,就从 2 一直算到 x-1。


static rt_uint32_t array1[ARRAY_LEN];
void func1(void)
{
? ? for (rt_uint32_t i = 1; i <= ARRAY_LEN; i++)
? ? {
? ? ? ? array1[i - 1] = 0;
? ? }


? ? rt_uint32_t x, y = 0, z = 0;
? ? rt_uint32_t i = 0;
? ? for (x = 2; x <= ARRAY_LEN; x++)
? ? {
? ? ? ? y = 0;
? ? ? ? for (i = 1; i <= x; i++)
? ? ? ? {
? ? ? ? ? ? if (x % i == 0)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? y++;
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? if (y == 2)
? ? ? ? {
? ? ? ? ? ? z++;
? ? ? ? ? ? array1[x - 1] = x;
? ? ? ? }
? ? }
? ? array1[0] = 1;
}


2,小学生毕业版:


x 如果有质因数,肯定会小于等于 x/2,所以捏,就从 2 一直到 x/2 即可。


static rt_uint32_t array2[ARRAY_LEN];
void func2(void)
{
? ? for (rt_uint32_t i = 1; i <= ARRAY_LEN; i++)
? ? {
? ? ? ? array2[i - 1] = 0;
? ? }


? ? rt_uint32_t x, y = 0, z = 0;
? ? rt_uint32_t i = 0;
? ? for (x = 3; x <= ARRAY_LEN; x++)
? ? {
? ? ? ? y = 0;
? ? ? ? for (i = 2; i <= x / 2; i++)
? ? ? ? {
? ? ? ? ? ? if (x % i == 0)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? y++;
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? if (y == 0)
? ? ? ? {
? ? ? ? ? ? z++;
? ? ? ? ? ? array2[x - 1] = x;
? ? ? ? }
? ? }
? ? array2[0] = 1;
? ? array2[1] = 2;
}


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇RTThread的finsh在IAR 430上移植.. 下一篇AttributeError: 'module'..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: