用go语言实现素数排位 已知素数序列为2、3、5、7、11、13、17、19、23、29……,即素数的第一个是2,第二个是3,第三个是5……那么,随便挑一个数,若是素数,能确定是第几个素数吗?如果不是素数,则输出0。 输入格式: 测试数据有多组,处理到文件尾。每组测试输入一正整数N(1≤N≤1000000)。 输出格式: 对于每组测试,输出占一行,如果输入的正整数是素数,则输出其排位,否则输出0。 输入样例: 6 2 6 4 5 13 991703 输出样例: 1 0 0 3 6 77901
时间: 2024-03-26 09:34:43 浏览: 56
编程输出1000组孪生素数,只要输出前十组孪生素数(差值为2的素数,如3和5,11和13)
以下是用 Go 语言实现素数排位的代码:
```go
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
scanner := bufio.NewScanner(os.Stdin)
for scanner.Scan() {
n := parseUint(scanner.Bytes())
if isPrime(n) {
fmt.Println(primeIndex(n))
} else {
fmt.Println(0)
}
}
}
func parseUint(bytes []byte) uint {
var x uint
for _, b := range bytes {
x = x*10 + uint(b-'0')
}
return x
}
func isPrime(n uint) bool {
if n < 2 {
return false
}
for i := uint(2); i*i <= n; i++ {
if n%i == 0 {
return false
}
}
return true
}
func primeIndex(n uint) uint {
var count, i uint
for count < n {
i++
if isPrime(i) {
count++
}
}
return count
}
```
思路:
1. 读入一个正整数 n。
2. 如果 n 是素数,输出它是第几个素数。否则,输出 0。
3. 重复上述步骤,直到文件尾。
代码解析:
1. `parseUint` 函数将一个字节数组转换为一个无符号整数。
2. `isPrime` 函数用于判断一个无符号整数是否是素数。如果它小于 2,那么它不是素数。否则,从 2 到它的平方根遍历每一个数,看它是否能整除它。如果能,那么它不是素数。否则,它是素数。
3. `primeIndex` 函数用于计算一个无符号整数是第几个素数。从 1 开始遍历每一个数,如果它是素数,那么计数器加 1,直到计数器的值等于输入的整数 n。
阅读全文