1、判断一个数是否为素数
思路:素数只有两个因数(1和本身),只需判断数n的因数为两个则为素数。
完整代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n,i,h=0;
scanf("%d",&n);
for(i=1; i<=n; i++)
{
if(n%i==0)
h++;
}
if(h==2)//判断有几个因数。
printf("yes\n");
else
printf("no\n");
}
2、筛选n以内的素数
用筛法求之N内的素数。
题目描述
用筛法求之N内的素数。
输入
N
输出
0~N的素数
样例输入
100
样例输出
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
(1)普通思路:和判断素数基本相同
完整代码:
#include <stdio.h>
#include <math.h>
int main()
{
int i,c,k,j;
scanf("%d",&c);
for(j=1; j<=c; j++)
{
k=0;
if(j==1)
continue;
for(i=2; i<=j; i++)
{
if(j%i==0)
k++;
}
if(k==1)
printf("%d\n",j);
}
}
(2)用素筛的方法做更加容易。
完整代码:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int prime[2000],primes[5000];
void aprime()
{
memset(prime, 1, sizeof(prime));//假设每一个数字为素数
prime[0]=prime[1]=false; //0和1不是素数
int N=3467;
for (int i=2; i<N; i++)
if (prime[i])
{
for (int k=i*i; k<N; k+=i) //素数的倍数都为合数
prime[k]=false;
}
return ;
}
int main()
{
int m;
aprime();
while(cin>>m)
{
for(int i=2;i<=m;i++)
if(prime[i])
cout<<i<<endl;
}
}
3、筛选n和m内的素数
又见素数
题目描述
输出n到m之间所有素数的个数和所有的素数
输入
两个数,n,m(n!=m),n,m均是整型
多组测试数据
输出
输出个数,和所有的素数,格式看样例。
样例输入
3 5 7 9
样例输出
2 3 5 1 7
思路:和上边是一样的思路。
完整代码:
#include <iostream>
#include<cmath>
using namespace std;
int main()
{
int n,q,m,i,j,h,d,x,c=0;
int a[100000];
int k=0;
while(cin>>n>>m)
{
c=0;
k=0;
int a[100000];
d=n>m?n:m;//d取n和m中的最大值
x=n>m?m:n;//x取n和m中的最小值
for(i=x; i<=d; i++)
{
h=0;
for( j=1; j<=sqrt(i); j++)
{
if(i%j==0)
{
h++;
}
}
if(h==1)
{
a[k]=i;
k++;
c++;
}
}
cout<<c<<endl;
for(q=0; q<c; q++)
cout<<a[q]<<" ";
cout<<endl;
}
}