我最近创建了一个程序,它会告诉你一个数字是否为素数。它得到的所有答案都是正确的但是9的素数。
package main
import "fmt"
func isPrime(num int) bool {
for x := 2; x > 1; x++ {
if num%2 == 0 {
return false
} else {
return true
}
}
return true
}
func main() {
fmt.Printf("is it a prime number: %v \n", isPrime(9))
}
有什么问题?
提前谢谢!
答案 0 :(得分:0)
实际上,您的代码只检查一个数字的奇偶校验,如果是偶数则返回false。我实际上并不知道Go,但我确实设法使用以下代码解决了这个问题:
func isPrime(num int) bool {
for x := 2; x < num; x++{
if num%x == 0 && num!=2{
return false
}
}return true;
}
答案 1 :(得分:0)
根据prime number definition 素数(或素数)是一个大于1的自然数,除了1和之外没有正除数,在你的代码中你只是检查它是否奇数。
我在Go https://play.golang.org/p/2XXTUFbjhy中给你一个快速的解决方案。它只会直到数字的平方根。
def transform_directoy(input_directory, output_directory):
import codecs, glob, os
from tika import parser
all_texts = []
for filename in sorted(glob.glob(os.path.join(input_directory, '*.pdf'))):
parsed = parser.from_file(filename)
texts = parsed['content']
all_texts.append(texts)
for i , a_list in enumerate(all_texts):
new_dir_path = output_directory
#print(new_dir_path)
path = os.path.join(new_dir_path, "list%d.txt" % i)
with codecs.open(path, "w", encoding='utf8') as filename:
for item in [a_list]:
filename.write(item+"\n")
另外,如果您有兴趣以更快的方式知道数字是否为引物,我建议您阅读Sieve of Eratosthenes
答案 2 :(得分:0)
1-以下是您的代码的工作版本:在The Go Playground上尝试。
package main
import "fmt"
func isPrime(num int) bool {
if num < 2 {
return false
}
for x := 2; x < num; x++ {
if num%x == 0 {
return false
}
}
return true
}
func main() {
fmt.Printf("is it a prime number: %v \n", isPrime(9))
}
2-唯一偶数素数是2,所以最好先检查它:
if n == 2 {
return true
}
然后没有其他偶数素数:全部删除它们,并且没有少于2的素数:
if n < 2 || n&1 == 0 {
return false
}
并且您不需要检查n
的平方根:
sqrt := int(math.Sqrt(float64(n)))
现在你可以从3开始,只有奇数(i += 2
):
for i := 3; i <= sqrt; i += 2 {
if n%i == 0 {
return false
}
}
在The Go Playground上试用:
package main
import (
"fmt"
"math"
)
func isPrime(n int) bool {
if n == 2 {
return true
}
if n < 2 || n&1 == 0 {
return false
}
sqrt := int(math.Sqrt(float64(n)))
for i := 3; i <= sqrt; i += 2 {
if n%i == 0 {
return false
}
}
return true
}
func main() {
fmt.Printf("is it a prime number: %v \n", isPrime(9))
for i := 0; i < 120; i++ {
if isPrime(i) {
fmt.Print(i, " ")
}
}
fmt.Println()
}
输出:
is it a prime number: false
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 101 103 107 109 113