问题:输入一个数x,输出x以内的所有素数
素数的定义: ( 方法1 )在大于1的自然数中,除了1和它本身以外不再有其他因数。
更简便: ( 方法2 )x不必被2~(n-1)的个整数整除,只需被2~n/2的整数整除,( 方法3 )甚至2~根号n
//输入一个数x,输出x以内的所有素数
//素数的定义: ( 方法1 )在大于1的自然数中,除了1和它本身以外不再有其他因数。
//更简便: ( 方法2 )x不必被2~(n-1)的个整数整除,只需被2~n/2的整数整除,( 方法3 )甚至2~根号n
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
//( 方法1 )
void OutputSushu(int x)
{
for (int i = 2;i <= x;i++) {//从2开始判断是不是素数(1肯定不是)
int j = 2;
for (;j < i;j++) {//判断能不能被2~x-1整除
if (i % j == 0) {//被整除,说明不是素数
break;
}
}
if (j >= i) {//如果没有被2~x-1整除,j最后++值≥i
printf("%d ", i);
}
}
}
//( 方法2 )
//void OutputSushu(int x)
//{
// for (int i = 2;i <= x;i++) {//从2开始判断是不是素数(1肯定不是)
// int j = 2;
// for (;j <= i/2;j++) {//判断能不能被2~x/2整除
// if (i % j == 0) {//被整除,说明不是素数
// break;
// }
// }
// if (j > i/2) {
// printf("%d ", i);
// }
// }
//}
//( 方法3 )
//void OutputSushu(int x)
//{
// for (int i = 2;i <= x;i++) {//从2开始判断是不是素数(1肯定不是)
// int j = 2;
// int k = sqrt(i);
// for (;j <= k;j++) {//判断能不能被2~k整除
// if (i % j == 0) {
// break;
// }
// }
// if (j > k) {
// printf("%d ", i);
// }
// }
//}
int main()
{
int x;
printf("请输入一个数: \n");
scanf("%d", &x);
printf("%d以内的素数有: \n", x);
OutputSushu(x);
return 0;
}