对于求素数的一些个人思考
Jackie

看到一道题

求100之内的素数

动手尝试后查阅相关资料看到一篇文章:求质数算法的N种境界-试除法和初级筛法

原文链接

//法一。当数据不是素数时需要算很多才能停:(
#include <stdio.h>
int main() {
int x;
scanf_s("%d", &x);
int i;
for (i = 2; i < x; i++)
{
if (x % i == 0)
{
break;
}
}
if (i < x)
{
printf("%d不是素数\n",x);
}
else {
printf("%d是素数\n",x);
}
return 0;
}
//法二。:)
#include <stdio.h>
int main(){
int x;
scanf_s("%d", &x);
int i;
int isPrime = 1;
for (i = 2; i < x; i++)
{
if (x % i == 0)
{
isPrime = 0;
break;
}
}
if (isPrime == 1)
{
printf("%d不是素数\n",x);
}
else {
printf("%d是素数\n",x);
}
return 0;
}
//法三。=)
#include<stdio.h>
#include<math.h>
#define N 15000
int main()
{
int a, i, j, k, num, sum = 0;
printf("Q1:要求多少以内的素数?\nQ2:要多少个素数?\n");
printf("Q1请输入0,Q2请输入1\n请输入:");
scanf_s("%d", &a);
while (a != 1 && a != 2)
{
printf("请重新输入:");
scanf_s("%d", &a);
}
if (a == 0)
{
printf("请输入数字:");
scanf_s("%d", &num);
for (i = 2; i <= num; i++)
{
k = sqrt(i);
for (j = 2; j <= k; j += 1)
{
if (i % j == 0)
{
break;
}
}
if (j > k)
{
printf("%d\t", i);
sum++;
if (sum % 10 == 0)
{
printf("\n");
}
}
}
printf("\n%d内一共有%d个素数", num, sum);
}
else if (a == 1)
{
printf("请输入数字:");
scanf_s("%d", &num);
for (i = 2; i <= N; i++)
{
k = sqrt(i);
for (j = 2; j <= k; j += 1)
{
if (i % j == 0)
{
break;
}
}
if (j > k)
{
printf("%d\t", i);
sum++;
if (sum % 10 == 0)
{
printf("\n");
}
if (sum == num)
{
break;
}
}
}
}
return 0;
}

附质数筛法工作过程GIF图

image

 评论
评论插件加载失败
正在加载评论插件