`
steven-zhou
  • 浏览: 213315 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

求<=n的所有素数

阅读更多
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(int argc, char **argv)
{
    if (argc != 2) {
        printf("Usage: ./a.out <num>\n");
        exit(EXIT_FAILURE);
    }

    int n = atoi(argv[1]);
    int arr[n + 1];

    // init
    int i;
    for (i = 0; i <= n; i++)
        arr[i] = i;

    int p;
    for (p = 2; p < n; p++)
        for ( i = p + 1; i <= n; i++)
            if (i % p == 0)
                arr[i] = 0;

    // display all prime number
    for (i = 0; i <= n; i++)
        if (arr[i] != 0)
            printf("%d\n", arr[i]);

    exit(EXIT_SUCCESS);
}
分享到:
评论
2 楼 steven-zhou 2008-10-30  
谢谢superloafer的提醒:)
我把算法优化了下,详见下:

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

#define IS_PRIME    1

int main(int argc, char **argv)
{
    if (argc != 2) {
        printf("Usage: ./a.out <num>\n");
        exit(EXIT_FAILURE);
    }

    int n = atoi(argv[1]);
    int primes[n + 1];
    int rsqrt = (int)sqrt(n) + 1;
    int i;
    int p;

    // init
    memset(primes, 0, sizeof(primes));
    primes[2] = IS_PRIME;

    for (i = 3; i <= n; i += 2)
        primes[i] = IS_PRIME;

    for (p = 3; p <= rsqrt; p += 2)
        for ( i = p + 2; i <= n; i += 2) {
            if (!primes[i])
                continue;
            primes[i] = i % p;
        }

    // display all prime numbers
    for (i = 0; i <= n; i++)
        if (primes[i])
            printf("%d\n", primes[i]);

    exit(EXIT_SUCCESS);
}

1 楼 superloafer 2008-10-30  
你这个程序好像有点问题哦。
1.程序会把1作为质数输出(根据质数定义,1显然不是质数)
2.效率比较低哦,一般的算法书都有更好的解法。
import java.util.*;

public class MathTest 
{
	public static void main(String[] args) 
	{
		if(args.length < 1) {
			return;
		}

		int k = Integer.parseInt(args[0]);

		if(k <= 0) {
			return;
		}
		
		boolean isPrime;
		List<Integer> primeList = new ArrayList<Integer>();
		for(int i = 2; i <= k; i++) {
			isPrime = true;
			for(int j = 2; j <= (int)Math.sqrt(i); j++) {
				if( i % j == 0) {
					isPrime = false;
					break;
				}
			}

			if(isPrime) {
				primeList.add(i);
			}
		}
	}
}


相关推荐

    前任意位为质数的N位质数

    给定一个整数N(2 &lt;= N &lt;= 8),生成所有的具有下列特性的特殊的N位质数:其前任意位都是质数。 例如,7331即是这样一个4位的质数,因为7、73和733也都是质数。 【输入形式】 标准输入上输入一个正整数N(2 &lt;= N...

    c语言输出N位质数

    给定一个整数N(2 &lt;= N &lt;= 8),生成所有的具有下列特性的特殊的N位质数:其前任意位都是质数。 例如,7331即是这样一个4位的质数,因为7、73和733也都是质数。 【输入形式】 标准输入上输入一个正整数N(2 ...

    习题 12:因子分解★

    输入n(1 &lt;= n &lt;= 1e9),有多组测试数据: 616 27 输出: 616 = 2^3 * 7 * 11 27 = 3^3 (注意输出空格,但行末不要有空格) 难度:for beginner http://www.yzfy.org/dis/listpost.php?tid=6&extra=page=1 先...

    输出前n位都是质数的n位质数

    自己写的,应该有些漏洞。主要思想是利用质数的特征在第k-1位的质数集合的基础上判断第k位的质数。

    N!的质因数分解

    将N!分解成质因数幂的乘积。 【输入形式】 从标准输入读取一个整数N(1&lt;=N&lt;=30000)。... pi为质数,(1 &lt;= i &lt;= n); 3. pi &lt; pj,(1 &lt;= i &lt; j &lt;= n); 4. ki为整数且ki &gt; 1,(1 &lt;= i &lt; j &lt;= n)。

    信息奥赛课课通(C++)p181-3蛇形方阵2

    问题描述: 输入一个正整数n,生成一个nxn的蛇形方阵(具体见样例)。 输入格式: 一行一个正整数n,1&lt;=n&lt;=20。 输出格式: 共n行,每行n个正整数,每个正整数占5列。

    哥德巴赫猜想的命题之一代码

    编程输入一个整数n(6&lt;=n&lt;=100),把n表示成两个素数之和,较小的数在+号的前面。 输入:一个整数n(6&lt;=n&lt;=100) 输出:n表示成两个素数的和(如果有多种和的表达式, 则只输出形如n=a+b中a最小的那组表达式) 输入 一个...

    判断质数1-5000之间的数据

    输入 N 个大于2的整数a,判断每一个数是否为...第一行为一个正整数N(1&lt;=N&lt;=100),接下来有N 行,每行一个待判断的整数 ai(2&lt;=ai&lt;=50000)。 Output: 输出共N行:对于每个ai输出一行,若ai为素数则输出YES,否则输出NO。

    输出新素数

    输出新素数 就是判断一个数是否出了1和他本身有且只有一个公约数

    C语言N!的分解代码

    从标准输入读取一个整数N(1 &lt;= N &lt;= 30000)。 【输出形式】 结果打印到标准输出。输出格式为:p1^k1*p2^k2…其中p1,p2…为质数且ki&gt;1。当ki=1时只输出pi,ki=0的项不输出。分解式中的素数按从小到大输出。...

    Java输出n以内的所有素数

    i * i &lt;= n; i++) { if (isPrime[i]) { for (int j = i * i; j &lt;= n; j += i) { isPrime[j] = false; } } } ``` 3. 输出素数 最后,遍历数组,打印所有标记为true的元素,即为素数。 ```java for (int i = 2...

    C语言面试100题(含答案)

    下列给定程序的功能是:读入一个整数k(2=&lt;k&lt;=10000),打印它的所有质因子(即所有素数的因子)。例如,若输入整数2310,则应输出:2、3、5、7、11。 请改正程序中的错误,使程序能得出正确的结果。 注意:不要改动...

    素数距离---ACM的一道题

    1. 定义一个函数isPrime(n),用于判断n是否为素数。 2. 初始化最小距离maxDist和最大距离minDist为非常大的值,同时记录对应的素数对。 3. 从L到U,对每个数x进行以下操作: a. 如果x是素数,检查x+1是否也是素数,...

    输出n以内的所有素数 c语言:找出N以内的所有素数

    输出n以内的所有素数c语言:找出N以内的所有素数 输出n以内的所有素数是c语言中的一种常见算法题,旨在找到小于或等于n的所有素数。该算法有多种实现方法,本文将介绍两种常见的方法。 方法一: 筛选法 该方法的...

    选择法求质数

    运用选择而不是普通算法求质数,运用新的思维方式,全新的实验方式。

    求解第N个质数(第N个素数)vs2010项目

    这里我们关注的是一个名为“求解第N个质数(第N个素数)vs2010项目”的项目,该项目使用了Visual Studio 2010作为开发环境。这个项目的目标是高效地找到序列中的第N个质数,这里的N可能是任意正整数。项目中采用的...

    100以内的所有素数c代码

    100以内的所有素数c语言代码 //100以内的所有的素数 #include &lt;stdio.h&gt; int main(int argc, char *argv[]) { int num,i,count; for(num=1;num&lt;=100;num++){//外层循环 //输出num的所有约数 count=0; for...

    N的阶乘的分解

    从标准输入读取一个整数N(1 &lt;= N &lt;= 30000)。 【输出形式】 结果打印到标准输出。 输出格式为:p1^k1*p2^k2…其中p1,p2…为质数且ki&gt;1。当ki=1时只输出pi,ki=0的项不输出。分解式中的素数按从小到大输出。 ...

    给定一个整数n,求出所有连续的且和为n正整数

    给定一个整数n,求出所有连续的且和为n正整数。比如对于整数27,结果为2~7、8~10、13和14,因为这些数之间的整数的和都是27。注意:并不是所有的整数都有结果,例如不存在连续的整数和为16。为了提高计算的效率,...

    素数的判断的方法,适合程序设计

    if (n &lt;= 1) return false; for (int i = 2; i &lt; n; i++) { if (n % i == 0) return false; } return true; } ``` ##### 2. 改进方法:开方检查法 利用数学原理,若n不是素数,则n必然有一个小于等于√n的...

Global site tag (gtag.js) - Google Analytics