用“埃氏筛法”求2~100以内的素数。算法原理:2~100以内的数,先去掉2的倍数,再去掉3的倍数,再去掉5的倍数,……依此类推,最后剩下的就是素数。要求使用数组实现。
时间: 2023-04-30 14:04:01 浏览: 203
题目要求使用“埃氏筛法”求2~100以内的素数。算法原理:2~100以内的数,先去除2的倍数,再去除3的倍数、5的倍数、7的倍数……依此类推,不断筛选出新的素数,直至完成。最后剩下的就是素数。要求使用数组实现。
相关问题
用java用“埃氏筛法”求2~100以内的素数。2~100以内的数,先去掉2的倍数,再去掉3的倍数,再去掉5的倍数,……依此类推,最后剩下的就是素数。要求使用数组
好的,我知道了。以下是使用Java语言实现的代码:
```java
public class SieveOfEratosthenes {
public static void main(String[] args) {
int[] numbers = new int[99];
int index = 0;
for (int i = 2; i <= 100; i++) {
numbers[index++] = i;
}
for (int i = 0; i < numbers.length; i++) {
if (numbers[i] == 0) {
continue;
}
for (int j = i + 1; j < numbers.length; j++) {
if (numbers[j] == 0) {
continue;
}
if (numbers[j] % numbers[i] == 0) {
numbers[j] = 0;
}
}
}
System.out.print("2~100以内的素数为:");
for (int i = 0; i < numbers.length; i++) {
if (numbers[i] != 0) {
System.out.print(numbers[i] + " ");
}
}
}
}
```
运行结果为:
```
2~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
```
首先,我们创建了一个数组 `numbers` ,用来存储 2~100 之间的所有数。接下来,我们使用双重循环来遍历数组 `numbers` ,第一层循环从第一个元素开始,第二层循环从第二个元素开始。如果第二层循环中的元素能够被第一层循环中的元素整除,那么将第二层循环中的元素赋值为0,表示它不是素数。最后,遍历数组 `numbers` ,输出不为0的元素,即为 2~100 以内的素数。
编写一个C#程序,用“埃氏筛法”求2~ 100以内的素数。2~ 100以内的数,先去掉2的倍数,再去掉3的倍数,再去掉4的倍数,以此类推....最后剩下的就是素数。
下面是一个使用C#编写的“埃氏筛法”求2~100以内的素数的程序:
```csharp
using System;
class Program
{
static void Main(string[] args)
{
int max = 100;
bool[] isPrime = new bool[max + 1];
// 将所有数标记为素数
for (int i = 2; i <= max; i++)
{
isPrime[i] = true;
}
// 去掉2的倍数、3的倍数、4的倍数...
for (int i = 2; i <= Math.Sqrt(max); i++)
{
if (isPrime[i])
{
for (int j = i * i; j <= max; j += i)
{
isPrime[j] = false;
}
}
}
// 输出素数
Console.Write("2~100以内的素数有:");
for (int i = 2; i <= max; i++)
{
if (isPrime[i])
{
Console.Write(i + " ");
}
}
Console.ReadKey();
}
}
```
程序首先创建了一个长度为101的bool数组,用于标记2~100中每个数是否为素数。然后将所有数标记为素数,接着从2开始循环到根号100,如果当前数是素数,则将其倍数标记为非素数。最后输出剩下的素数。
阅读全文