c语言求2到100内的素数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言求2到100内的素数相关的知识,希望对你有一定的参考价值。

#include
<stdio.h>
int
main()

int
a,b=1,c;
for(a=2;a<=100;a++)

for(b=2;b<a;b++)
///b的范围是2到a。查找a的因子,如果这里面没有一个因为,则表示素数

if(a%b==0)
break;

if(b>=a)
///上面的for中的break没有执行,循环正常结束,所以是素数,输出

printf("%d
",a);


getch();
return
0;
参考技术A 你的代码很乱
而且完全有逻辑错误,即你的代码判断素数是有问题的。我帮你写了一个完整的逻辑清新的小代码,希望帮到你。
#include
<stdio.h>
#include
<math.h>
#include
<assert.h>
bool
IsPrimeNumber(int
num)//判断num是否为素数,是的话返回true,否则返回false

assert(num
>=
1);
if(num
==
1)
return
false;
else

for(int
i
=
2;
i
<=
sqrt(double(num));
i++)
if(num
%
i
==
0)
return
false;

return
true;

int
main()

for(int
start
=
2,
finish
=
100;
start
<=
finish;
start++)//判断区间[start,finish]的数是否为素数,是则输出。
if(IsPrimeNumber(start))
printf("%d\t",
start);
printf("\n");
return
0;
参考技术B 你的代码很乱 而且完全有逻辑错误,即你的代码判断素数是有问题的。我帮你写了一个完整的逻辑清新的小代码,希望帮到你。

#include
#include
#include

bool IsPrimeNumber(int num)//判断num是否为素数,是的话返回true,否则返回false

assert(num >= 1);
if(num == 1)
return false;
else

for(int i = 2; i <= sqrt(double(num)); i++)
if(num % i == 0)
return false;

return true;


int main()

for(int start = 2, finish = 100; start <= finish; start++)//判断区间[start,finish]的数是否为素数,是则输出。
if(IsPrimeNumber(start))
printf("%d\t", start);
printf("\n");
return 0;

c语言求素数以及改进算法

代码需要使用c99编译

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
//是否为素数
//从2到x-1测试是否可以整除 
//时间复杂度O(n-2),n趋向正无穷
int isPrime(int x)

    int ret = 1;
    for(int i = 2; i < x; i++)    
    
        if(x % i == 0)
        
            ret = 0;
            break;
        
    
    return ret;


//除了2以外,所有的偶数都不是素数,从3到x-1,每次加2 
//x为偶数时间复杂度O((n-3)/2+1)
//x很大时时间复杂度接近于(n/2)
int isPrime2(int x)

    int ret = 1;
    if(x == 1 || (x % 2 ==0 && x != 2))
        ret = 0;
        
    for (int i = 3; i < x; i += 2)
    
        if( x % i == 0)
        
            ret = 0;
            break;
        
    
    
    return ret;


//无须到x-1,到sqrt(x) 
//时间复杂度O(Log2n) 即sqrt(x) 
int isPrime3(int x)

    int ret = 1;
    
    if(x == 1 || x % 2 == 0 && x != 2)
        ret = 0;
    for(int i = 3 ; i < sqrt(x); i += 2)
    
        if( x % i == 0)
        
            ret = 0;
            break;
        
    
    
    return ret;


//判断是否能被已知的且<x的素数整除
int isPrime4(int x, int knownPrimes[], int numberOfKnownPrimes)

    int ret = 1;
    int i;
    
    for( i = 0; i < numberOfKnownPrimes; i++)
    
        if (x % knownPrimes[i] == 0 )
        
            ret = 0;
            break;
        
    
    
    return ret;

 
int main()

    const int number = 100;
    int prime[number] = 2;
    int count = 1;
    int i = 3;
    
    while( count < number )
    
        if(isPrime4(i ,prime, count))
        
            prime[count++] = i;
        
        i++;
    
    
    for( i = 0; i < number; i++)
    
        printf("%d",prime[i]);
        if( (i + 1) % 5 ) printf("\t");
        else printf("\n");
    
    return 0;

 

以上是关于c语言求2到100内的素数的主要内容,如果未能解决你的问题,请参考以下文章

c语言 指定范围内的回文素数,题目如下,要求1S内完成的

如何用C语言求1至100所有素数的和?

c语言中用筛选法求素数

用c语言求500到1000的素数

用c语言求1000以内的素数(素数是只能被1和它本身整除的数)

用C++求50~100内的素数,具体问题如下