素数判断的初步理解

来源:互联网 发布:淘宝美工是干嘛的 编辑:程序博客网 时间:2024/06/05 18:23
1.#include<stdio.h>int main(){    int i,n;    scanf("%d",&n);    for(i=2;i<n;i++)//作判断时实际上只需要比较到根号下n次方    if(n%i==0)break;    if(i<n||n==1)puts("No");    else puts("Yes");}2.#include<stdio.h>int n,i,j,a[1000001],p[100000],t=0;int main(){    scanf("%d",&n);    a[1]=0;//这步可以省略,没必要    for(i=2;i<=n;i++)a[i]=1;//相当于作一个标记,到最后是一的就可以输出一个素数    for(i=2;i<=n;i++)        if(a[i]){            p[t++]=i;//若这个数十第一个素数            for(j=i+i;j<=n;j+=i)//则j=2*i....j=n*i一定不是素数,即把a[j]置为0;    a[j]=0;        }    for(i=0;i<t;i++)        printf("%d%c",p[i],i<t-1?' ':'\n');}只能输出N以内的所有素数,不能对素数进行单个输出。3.#include<stdio.h>#include<math.h>int p[1000000],a[10000001],t=0;int prime(int n){    int i,q;    q=(int)sqrt(n);//比较到平方根    for(i=0;p[i]<=q&&t;i++)        if(n%p[i]==0)//在这里它只对质数进行了取模运算,定理:若正整数a>1,且a不能被不超过a的平方根return 0;//的任一素数整除,则a是素数    return 1;}int  main(){    int n,i;    scanf("%d",&n);    for(i=2;i<=n;i++)        if(prime(i))p[t++]=i;    for(i=0;i<t;i++)        printf("%d%c",p[i],i<t-1?' ':'\n');        return 0;}

原创粉丝点击