C语言复习---判断素数

一般

int main01()
{
    int a, n_sqrt, flag=1;
    scanf("%d", &a);
    n_sqrt = sqrt(a);
    for (int i = 2; i <= n_sqrt; i++)
        if (a%i == 0)
        {
            flag = 0;
            break;
        }
            
    if (flag)
        printf("%d is\n", a);
    else
        printf("%d not\n", a);

    system("pause");
    return 0;
}

int main()
{
    int a, n_sqrt,i;
    scanf("%d", &a);
    n_sqrt = sqrt(a);
    for (i = 2; i <= n_sqrt; i++)
        if (a%i == 0)
            break;

    if (i>n_sqrt)
        printf("%d is\n", a);
    else
        printf("%d not\n", a);

    system("pause");
    return 0;
}

高效率

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

//... 6x-1,6x,6x+1,6x+2,6x+3,6x+4,6x+5,6(x+1),6(x+1)+1 ...
//可以看出6x,6x+2,6x+3,6x+4都是因数
//6x-1,6x+1中有一定几率是素数   例如:23 25
int isPri(n)
{
    float n_sqrt;
    int i = 0;

    //对小于5的进行判断
    if (n == 2 || n == 3)
    {
        return 1;
    }

    //筛选不必要的
    if (n % 6 != 5 && n % 6 != 1)
    {
        return 0;
    }

    //进行数据筛选
    n_sqrt = floor(sqrt((float)n));    //floor向下取整
    for (i = 5; i < n_sqrt;i+=6)    //以6为步长
    {
        if (n%i == 0 || n % (i + 2) == 0)    //判断i和i+2就是6n+5和6n+7(n从0开始)可以看做6m-1,6m+1(m从1开始)
            return 0;
    }

    return 1;
}


int main()
{
    int i = 0;
    for (; i < 200;i++)
    {
        if (isPri(i)==1)
        {
            printf("%d ", i);
        }
    }

    system("pause");
    return 0;
}

 

posted @ 2018-07-27 11:32  山上有风景  阅读(246)  评论(0编辑  收藏  举报