Python素数“;C-编号“;

Python素数“;C-编号“;,python,numpy,Python,Numpy,“C-number”是一个n>1的整数,因此(b^n)mod n=b表示所有整数1 基本上,我必须创建一个程序来运行大约2000个整数(1-2000),让它满足C数条件,然后还要检查它是否不是素数。我似乎无法使循环正常工作。 我有一个程序可以创建一个非素数列表,还有一个工作程序,如果我输入一个数字,它会返回这个数字,如果它是c-数字,如果不是,我会返回false 我希望它只检查数字1-2000,而不仅仅是我输入的一个数字,然后还检查非素数列表 这是我的密码: import numpy def p

“C-number”是一个n>1的整数,因此(b^n)mod n=b表示所有整数1 基本上,我必须创建一个程序来运行大约2000个整数(1-2000),让它满足C数条件,然后还要检查它是否不是素数。我似乎无法使循环正常工作。 我有一个程序可以创建一个非素数列表,还有一个工作程序,如果我输入一个数字,它会返回这个数字,如果它是c-数字,如果不是,我会返回false

我希望它只检查数字1-2000,而不仅仅是我输入的一个数字,然后还检查非素数列表

这是我的密码:

import numpy
def primesfrom2to(n):
""" Input n>=6, Returns a array of primes, 2 <= p < n """
sieve = numpy.ones(n/3 + (n%6==2), dtype=numpy.bool)
for i in xrange(1,int(n**0.5)/3+1):
    if sieve[i]:
        k=3*i+1|1
        sieve[       k*k/3     ::2*k] = False
        sieve[k*(k-2*(i&1)+4)/3::2*k] = False
    return numpy.r_[2,3,((3*numpy.nonzero(sieve)[0][1:]+1)|1)]

num=range(600)
mylist =primesfrom2to(600)
s = [item for item in num if item not in mylist]
a=[]
d=[]        
from math import *
def numc(n):
    for a in range(1,n):

            c= a**n
        d=c%n       
    if a == d:
        return n
    else:
        return False
print numc(561)
导入numpy
def PrimesFrom2至(n):

“”“Input n>=6,返回一个素数数组,2您可能只需要修复缩进(需要在很多地方修复):


Python基本上是通过缩进编写的。

最简单、甚至更重要的方法是:创建两个列表,一个用于找到的素数,一个用于c数。然后遍历列表,检查哪些是c数,哪些不是素数。还可以将素数和c数的函数拆分为两个函数。Somet他喜欢:

prime_numbers = []
c_numbers = []

amount = 2000

for i in xrange(amount):
   if is_prime(i):
      prime_numbers.append(i)

   if is_c_number(i):
      c_numbers.append(i)

for i in xrange(amount):
    if i in c_numbers and (not i in prime_numbers):
        print i
首先,不确定numc()做您所期望的——正如所写,if语句将仅针对范围内a的最后一个值进行测试。if语句不在for循环块中,因此循环将旋转通过赋值,而if语句仅与上次迭代中指定的值相反。这似乎更符合您的要求:

def numc(n):
    for a in range(1,n):
        c= a**n
        d=c%n       
        if a != d:
           return False
    return n
在这里,如果某个a值未通过if测试,则函数返回False。如果所有a值均通过测试,则返回true

其次,我的草稿和你的草稿都不返回数组,只返回整数或布尔值。要获得传递的值数组,必须对候选数组的每个项调用函数

这将为候选数组的每个成员提供整数或布尔输出:

c_values = [numc(i) for i in range(1, 2000)]
通过在循环中进行测试,您可以只获得通过的值:

    c_values = [numc(i) for i in range(1, 2000) if numc(i)]
通过嵌套列表理解,无需两次调用numc():

    c_values = [i for i in [numc(j) for j in range(1, 2000)] if i]
它首先生成输出值的完整数组,然后仅返回那些为真的值

编辑:您似乎被块缩进或两个返回语句弄糊涂了。下面是一个返回的另一种方式:

def numc(n):
    retval = n
    for a in range(1,n):
        c= a**n
        d=c%n       
        if a != d:
           retval = False # reset return value
           break   # halt the loop
    return retval
这里的默认返回值是>,如果cnumber条件被某个>值违反,将在>循环中重置。在这种情况下,>停止循环(尽管这里不需要)。函数只返回到达返回状态时发生的>值


我的初稿也有同样的效果,但是for循环被>语句中断了/“中断”——这也中断了函数,阻止它到达>。如果没有到达该语句,即没有>违反了条件,函数将到达并执行>。如果函数有两个返回语句,它将返回只执行到达的第一个,之后的所有代码都将被忽略。

这里有问题吗?您是否有任何错误?哪些错误?您是否得到错误的结果?您得到了什么结果?您希望得到什么结果?问题是,我如何做一个循环,检查所有值1-2000是否为c数,然后对照我的p进行检查优等还是非优等数字列表?这个程序没有任何错误,我只是不知道如何增强它以获得我想要的结果。像这样更改缩进实际上给了我一个错误。代码目前“工作正常”“就像我所有的部分都是写出来的一样。我只是个新手,不知道如何为所有1-2000的值编写循环,而不仅仅是我输入的值,然后将其与我的非primest列表进行比较,这很奇怪。但我认为从长远来看这是你的问题。从我看到的情况来看,primesfrom2to不是作为函数运行的,因为缩进是错误的。我可能错了,但你是不是从另一个文件中抓取了它并添加到了这里?我确实是从另一个文件中抓取的,并且必须快速更改这里的缩进,很可能是将它切碎了。是的,我会重新编写代码,确保所有内容都按您的意愿缩进。然后当循环数字时,在那里打印它们。当你“返回”一个函数时,你就在那里结束了代码。您可以使用“yield”,但这有点让人困惑。您建议在if语句后面加上什么?而不是返回一个值。有没有像“捕手”或列表这样的东西,我可以放在那里接受所有的真实值,并创建一个只包含CNumber的列表?我明白你的意思了,现在我还有一个问题,如果你能回答的话。基于我的cnumbers(numc)代码,我如何设置循环来创建一个包含所有cnumbers的列表,而不是只为我输入的单个值输出一个值?我不确定numc是做什么的,我认为如果n是cnumbers,它会返回n,否则返回False(如果是这样,你最好让它返回False/true)。然后您可以使用is_c_编号,而不是我的解决方案中描述的numc。非常感谢!我让它完全按照我想要的方式工作。如果oyu不介意回答的话,我想我有一个问题。你所做的numc(n)的第一个循环到底是如何工作的?我对你的第二次回归有点困惑,它指的是什么
def numc(n):
    retval = n
    for a in range(1,n):
        c= a**n
        d=c%n       
        if a != d:
           retval = False # reset return value
           break   # halt the loop
    return retval