Plusenxue 发表于 2016-8-26 14:30:43

n = 1
temp =
value = 3
while n <= 10000:
    for i in temp:
      if value%i == 0:
            break
      if i == temp[-1]:
            temp.append(value)
            n += 1

    value += 1

print(temp)

impossible 发表于 2016-9-3 22:04:30

#include <stdio.h> #include <math.h>int isPrime(int num);int main() {         int i,num=3;                for(i=1;i!=10001;num+=2)         {                 if(isPrime(num))i++;         }         printf("%d",num-2);                return 0; } int isPrime(int sum) {         int i,choose=1;                for(i=3;i<=sqrt(sum);i+=2)         {                 if(sum%i==0)                 {                       choose=0;                       break;                 }                 }                return choose; }

776667 发表于 2016-10-8 11:02:00

本帖最后由 776667 于 2016-10-8 11:12 编辑

def euler(x):
    count = 0
    number = 2
    while count < x:
      if number == 2:
            number += 1
            count += 1
            continue
      for i in range(2,number):
            if not number%i:
                break
      else:
            count += 1
      number += 2
    return number - 2

if __name__ == '__main__':
    print(euler(10001))

镜中人31 发表于 2016-10-8 16:09:50

i = 5
j = 2
list1 =
while True:
    for k in list1:
      if(i%k == 0):
            break
      if k == list1:
            list1.append(i)
            j += 1
    if j == 10001:
      break
    i += 2
print(i)

我的20来秒时间,答案104743

tsembrace 发表于 2016-11-8 17:50:06

import time
import math

start=time.clock()
def isPrime(n):
    if n<2:
      return False
    elif n==2:
      return True
    else:
      m=int(math.sqrt(n))
      for i in range(2,m+1):
            if n%i==0:
                return False
      return True

count=0
i=2
while count<10001:
    if isPrime(i):
      count+=1
      i+=1
      continue
    else:
      i+=1

print(i-1)
end=time.clock()
print("耗时"+str(end-start)+"s")
      


toBeNot 发表于 2016-11-9 16:00:10

public class The10001Prime {
        public static boolean isPrime(int n){
                boolean flag = true;
                for(int i = 2;i < n;i++){
                        if(n % i == 0){
                                flag = false;
                                break;
                        }
                }
                return flag;
        }
        public static void main(String[] args){
                int number = 1;
                int j = 0;
                for(j = 3;number < 10001;j = j +2){
                        if(isPrime(j)){
                                number += 1;
                        }
                }
                System.out.println("第10001个质数是:" + (j - 2));       
        }
}

梦想绘制者 发表于 2016-11-12 13:19:25

zxc123qwe 发表于 2016-4-26 13:04
这代码怎么弄上去的,还能粘贴复制显示行数。教教我吧

看这个帖子
http://bbs.fishc.com/forum.php?mod=viewthread&tid=1742&page=1#pid11009

梦想绘制者 发表于 2016-11-12 14:09:34

本帖最后由 梦想绘制者 于 2016-11-12 14:11 编辑

# Python 3.5实现求第10001个质数
def isPrime(n):
    if n <= 1:
      return False
    else:
      half = int(n ** 0.5) # n // 2
      for i in range(2,half + 1):
            if n % i == 0:
                return False
      return True

def nthPrime(nth):
    primeCount = 0
    num = 1
    while 1:
      num += 1
      if isPrime(num):
            primeCount += 1
      else:
            continue
      if primeCount == nth:
            return num

nth = 10001
print('第%d个质数为%d'%(nth, nthPrime(nth)))

速度还蛮快的, 1s多就出结果。
>>>
第10001个质数为104743

lyciam 发表于 2016-11-18 01:20:37

t = time.clock()

def isprime(n):
    if (n%2==0 and n!=2) or n==1: return False
    for x in range(3,int(math.sqrt(n))+1,2):
      if n%x==0 or n%5==0: return False
    else: return True

def euler07(num=10001):
    """第10001个质数是多少?"""
    count = 0
    n = 0
    while count<num:
      n += 1
      if isprime(n): count+=1
    return {count:n}

print(euler07(10001),'time:',time.clock()-t)

{10001: 104743} time: 0.45091703770432073

芒果加黄桃 发表于 2017-1-9 10:01:30

# encoding:utf-8
from math import sqrt
from time import time
      
def findNPrimes(number):
    if number == 1:
      return
    elif number == 2:
      return
    else:
      # 初始化一个素数列表
      l_pn =
      n = 3
      # 循环遍历,判断是否为素数
      while len(l_pn) < number:
            n += 2
            # 标志位
            ispm = True
            sqr_n = int(sqrt(n))
            for t in l_pn:
                if n % t == 0:
                  ispm = False
                  break
                if t > sqr_n:
                  break               
            if ispm:
                l_pn.append(n)               
      return l_pn
   
number = int(input('请输入要查找的数值:'))   
start = time()
print('第 %d 个素数是: %d' % (number, max(findNPrimes(number))))
print('cost %.3f sec' % (time() - start))



第 10001 个素数是: 104743
cost 0.135 sec

渡风 发表于 2017-1-12 22:46:28

此代码使用matlab编程
Problem7所用时间为1.1085秒
Problem7的答案为104743
%题目7:找出第10001个质数
function Output=Problem7(Input)
if nargin==0
    Input=10001;
end
tic
Sum=0;
Start=1;
while (Sum<Input)
    Start=Start+1;
    Judge=Prime_Judge(Start);
    if Judge==1
      Sum=Sum+1;
    end
end
Output=Start;   
toc
disp('此代码使用matlab编程')
disp(['Problem7所用时间为',num2str(toc),'秒'])
disp(['Problem7的答案为',num2str(Output)])
end
%% 子程序
%验证其是否为素数
%若输入为素数则Judge为1,否则为0
function Judge=Prime_Judge(Input)
if Input==2
    Judge=1;
else
    node=floor(sqrt(Input))+1;
    Judge=1;
    for ii=2:node
      ifmod(Input,ii)==0
            Judge=0;
            break
      else
      end
    end
end
end

FlySelf 发表于 2017-2-2 15:23:37

import time

def is_prime(number):
    '判断是否为质数'
    flag = True
    for i in range(2, int(number ** 0.5) + 1):
      if number % i == 0:
            flag = False
    return flag

def find_prime(number=1):
    '寻找第number个质数'
    prime = 1
    i = 1
    while i < number:
      prime += 2
      if is_prime(prime):
            i += 1
    return prime

start = time.clock()
print('第10001个质数为%d' %find_prime(10001))
end = time.clock()
print('程序执行了%fs。' %(end - start))

执行结果:
第10001个质数为104743
程序执行了1.150654s。

piperacillin 发表于 2017-2-17 15:36:43

def ifprime(n):
    k = 0
    if n == 1 or n == 0:
      k = 1
    elif n % 2 == 0 and n != 2:
      k = 1
    else:
      from math import sqrt
      maxi = int(sqrt(n))
      for i in range(3,maxi+1,2):
            if n % i == 0:
                k = 1
                break
    if k == 0:
      return True
    if k == 1:
      return False


i = 1
j = 1
while True:
    j +=2
    if ifprime(j):
      i +=1
    if i== 10001:
      print(j)
      break


104743 平均运行时间0.2s

0mrli0 发表于 2017-2-21 15:04:24

/*题目:求第10001个质数*/
#include <stdio.h>
#include <math.h>

int IsPrime(int x)
{
        int i, flag;
        flag = 1;
        for (i=2; i<=(int)sqrt(x); i++)
        {
                if (x%i == 0)
                {
                        flag = 0;
                        break;
                }
        }
        return flag;
}

int main()
{
        int i = 1;//存放结果
        int n = 0;//数目
        while (n<10002)
        {
                i++;
                n = IsPrime(i) ? n+1 : n;
        }
        printf("第10001个质数是: %d \n", i);
        return 0;
}

第10001个质数是: 104759

Process returned 0 (0x0)   execution time : 0.177 s

余欲渔 发表于 2017-3-2 11:30:13

这题要是算法不好不知道跑多久,我这效率应该还是不错的
zs=
i=5
def zzz(i):
    for x in zs:
      if i%x==0:
            return 0
    return 1
while True:
    if zzz(i):
      zs.append(i)
    i+=2
    if len(zs)>10000:
      print(zs)
      break


== RESTART: C:\Users\ASUS\AppData\Local\Programs\Python\Python35-32\test.py ==
104743
>>>

夜魔时生 发表于 2017-3-6 23:08:24

m=3
n=1
while True:
    for i in range(2,m):
      if m%i==0:
            break
    else:
      n+=1
    if n==10001:
      print(m)
      break
    m+=1

99592938 发表于 2017-3-14 16:07:52

import time
start = time.clock()
list_prime=
num=5
a=2
while 1:
    ret=1
    for i in range(2,int(num**0.5)+1):
      if num%i ==0:
            ret=0
            break
    if ret:
      list_prime.append(num)
      a+=1
    if a==10001:
      print(num)
      break
    num+=2
end = time.clock()
print("read:%f s" %(end - start))
104743
read:0.803580 s

99592938 发表于 2017-3-14 16:10:18

99592938 发表于 2017-3-14 16:07
104743
read:0.803580 s

list_prime其实不用加进来,但发现几乎没有降低运行效率,就写上了,毕竟万一让输出1万个质数呢

JonTargaryen 发表于 2017-3-28 14:17:50

本帖最后由 JonTargaryen 于 2017-3-28 14:21 编辑

The 10001st prime is: 104743

#include <stdio.h>
#include <math.h>

int is_prime(long);

int main(void)
{
    long num = 3;
    int count = 2;

    while(count < 10001)
    {
      num += 2;

      if(is_prime(num))
      {
            count++;
      }
    }

    printf("The %dst prime is: %ld\n", count, num);

    return 0;
}

int is_prime(long num)
{
    long i;

    for(i = 2; i <= sqrt(num); i++)
    {
      if(!(num % i))
      {
            return 0;
      }
    }

    return 1;
}

JonTargaryen 发表于 2017-3-28 14:30:09

JonTargaryen 发表于 2017-3-28 14:17
The 10001st prime is: 104743

import math

def is_prime(num):
    for i in range(2, int(math.sqrt(num)) + 1 ):
      if not (num % i):
            return 0

    return 1

def main():
    num = 3
    count = 2

    while count < 10001:
      num += 2

      if is_prime(num):
            count += 1

    print("The 10001st prime is:", num)

if __name__ == "__main__":
    main()
页: 1 [2] 3 4 5
查看完整版本: 题目7:找出第10001个质数