质数(素数)的求法及相关例题
质数是什么?
质数(素数)是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
1-1000的质数表
代码:
#include<stdio.h>
#include<math.h>
int main()
{
int m,n;
scanf("%d%d",&m,&n);
int i,j;
int num=0;
for(i=m; i<=n; i++)
{
for(j=2; j<=sqrt(i); j++)
if(i%j==0)
break;
if(j>sqrt(i))
{
printf("%d ",i);
num++;
if(num%10==0)
printf("\n");
}
}
printf("\n");
return 0;
}
素数的求法有很多,时常在各大oj里面出现
洛谷-质数口袋
题目链接:https://www.luogu.com.cn/problem/P5723
#include<bits/stdc++.h>
int isprime(int n)
{
int i;
for(i=2; i<=sqrt(n); i++)
{
if(n%i==0)
{
return 0;
}
}
return 1;
}
int main()
{
int n;
scanf("%d",&n);
if(n==1) printf("0\n");
int sum=0;
int count=0;
for(int i=2; i<=n; i++)
{
if(isprime(i))
{
sum+=i;
}
if(isprime(i)&&sum<=n)
{
printf("%d\n",i);
count++;
}
if(sum>=n)
{
printf("%d\n",count);
break;
}
}
}
下面是总结的几个求素数的方法
一、从2到n-1每个数均整除判断 时间复杂度O(n)
int isPrime(int k)
{
int j;
for ( j=2; j<k; j++ )
{
if(k%j==0) // 如果不为素数返回0
{
return 0;
}
}
return 1; // 反之则返回1
}
顾名思义,将这个数与2到n-1全部整除一下,没有因数就是素数了,素数是只有1和它本身作为因数的。
二、开根号法:从2到根号n均整除判断 时间复杂度O(根号n)
int isPrime(int n)
{
int i;
for ( i=2; i<=sqrt(n); i++ )
{
if(n%i==0) // 如果不为素数返回0
{
return 0;
}
}
return 1; // 反之则返回1
}
参考https://blog.youkuaiyun.com/zhao2chen3/article/details/82955794