`
steven-zhou
  • 浏览: 207890 次
  • 性别: 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);
			}
		}
	}
}


相关推荐

    c语言输出N位质数

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

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

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

    习题 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)。

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

    编程输入一个整数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的项不输出。分解式中的素数按从小到大输出。...

    选择法求质数

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

    09年西北工业大学研究生复试机试题

    给出一个数N(2&lt;=N&lt;=10000),判定它是否为素数。 素数:一个大于等于2的数,除了1和它本身,再没有其他的整数能将其整除的数叫素数。 输入: 从标准输入输入一个整数。 输出: 若给定数为素数,向标准输出输出...

    N的阶乘的分解

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

    使用while循环设计一个程序,用户在文本框中输入一个整数n,单击“筛选素数”按钮,程序将找出3~n的所有素数并在列表框中输出。

    private void button1_Click(object sender, EventArgs e) ... i &lt;= n; i++) { a = 1; for (int j = 2; j &lt;= i - 1; j++) if (i % j == 0) { a = 0; break; } if (a != 0) listBox1.Items.Add(i);

    判断一个数是否为素数.docx判断一个数是否为素数可以通过检查它是否只能被1和它本身整除来实现 以下是一个简单的 Python

    if n &lt;= 1: return False if n &lt;= 3: return True if n % 2 == 0 or n % 3 == 0: return False i = 5 while i * i &lt;= n: if n % i == 0 or n % (i + 2) == 0: return False i += 6 return True # 测试 ...

    输出1到n之间的素数

    输出1到n之间的素数,c语言程序,练习用。

    如何判断质数c++代码

    i &lt;= n-1;i++){ if(n % i == 0){ return false; } } return true; } int main(){ //11、13、17、19…… int n,sum = 0; cin &gt;&gt; n; for(int i = 1;i &lt;= n;i++){ sum += isPrime(i); } cout &lt;&lt; sum;...

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

    求解第N个质数(第N个素数)vs2010项目计算时间差不多 用的是试除法

    求范围内的最大孪生素数

    if (n &lt;= 1) return 0; if (n == 2) return 1; // 所有偶数都不是素数 if (n%2 == 0) return 0; // 只需要检查奇数 /* m不必被2~m-1之间的每一个整数去除,只需被2~√m之间的每一个整数去除就可以了。 ...

    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的项不输出。分解式中的素数按从小到大输出。

Global site tag (gtag.js) - Google Analytics