本文目录一览:
- 1、Python程序,定义一个 prime() 函数求整数 n 以内(不包括n)的所有素数(1不是素数)
- 2、用递归求素数分解 求高手修改 !!
- 3、python将一个正整数分解质因数.
- 4、Python 实现递归
- 5、使用python将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。应该要怎么做?
Python程序,定义一个 prime() 函数求整数 n 以内(不包括n)的所有素数(1不是素数)
定义一个 prime() 函数求整数 n 以内(不包括n)的所有素数(1不是素数),br并返回一个按照升序排列的素数列表。使用递归来实现一个二分查找算法br函数bi_search(),该函数实现检索任意一个整数在 prime() 函数生成的素数列br表中位置(索引)的功能,并返回该位置的索引值,若该数不存在则返回 -1。brbr输入格式:br第一行为正整数 nbr接下来若干行为待查找的数字,每行输入一个数字br输出格式:br每行输出相应的待查找数字的索引值br输入样例:br10br2br4br6br7br输出样例:br0br-1br-1br3br
用递归求素数分解 求高手修改 !!
#include stdio.h
#include math.h
/*声明函数int isPrime(int n)判断一个数是否为素数*/
int isPrime(int n);
/*声明函数max(int num)求一个数的最大为素数的公约数*/
int max(int num);
/*声明函数void recurPrintFactor(int n)打印素数分解的结果*/
void recurPrintFactor(int n);
main()
{
/*a起始数,b结尾数,n被操作数*/
int a,b,n;
printf("Please input two integers:");
scanf("%d %d",a,b); //最好以空格做分隔符
printf("The result is:\n");
/*从a到b逐一对数进行操作*/
for(n=a;n=b;n++)
{
printf("%d=",n);
recurPrintFactor(n);
putchar('\n'); //换行
}
printf("\n");
system("pause");
return 0;
}
int isPrime(int n)
{
int i=2,limit;
int isPrim=1;
limit=(int)(sqrt(n)+0.5);
while (i=limit isPrim==1){
if ((n%i)==0)
isPrim=0;
else
i++;
}
return isPrim;
}
int max(int n)
{
int i;
i=n-1;
while((n%i!=0)||(isPrime(i)==0))
{
i=i-1;
}
return i;
}
void recurPrintFactor(int n)
{
int num = max(n); //max只调用一次就行了,不要重复调用
if(num==1) //终止条件一定要放前面
{
printf("%d",n);
}
else
{
printf("%d*",num);
/*输入的值=前一个因子最大素公约数*/
recurPrintFactor(n/num);
}
return;
}
python将一个正整数分解质因数.
n not in [1] 就是n不等于1
print '{}*'.format(index)是在最后将输入的n打印成质因数,就是变成1*2*5这种样式
Python 实现递归
一、使用递归的背景
先来看一个☝️接口结构:
这个孩子,他是一个列表,下面有6个元素
展开children下第一个元素[0]看看:
发现[0]除了包含一些字段信息,还包含了 children 这个字段(喜当爹),同时这个children下包含了2个元素:
展开他的第一个元素,不出所料,也含有children字段(人均有娃)
可以理解为children是个对象,他包含了一些属性,特别的是其中有一个属性与父级children是一模一样的,他包含父级children所有的属性。
比如每个children都包含了一个name字段,我们要拿到所有children里name字段的值,这时候就要用到递归啦~
二、find_children.py
拆分理解:
1.首先import requests库,用它请求并获取接口返回的数据
2.若children以上还有很多层级,可以缩小数据范围,定位到children的上一层级
3.来看看定义的函数
我们的函数调用:find_children(node_f, 'children')
其中,node_f:json字段
children:递归对象
以下这段是实现递归的核心:
if items['children']:
items['children']不为None,表示该元素下的children字段还有子类数据值,此时满足if条件,可理解为 if 1。
items['children']为None,表示该元素下children值为None,没有后续可递归值,此时不满足if条件,可理解为 if 0,不会再执行if下的语句(不会再递归)。
至此,每一层级中children的name以及下一层级children的name就都取出来了
希望到这里能帮助大家理解递归的思路,以后根据这个模板直接套用就行
(晚安啦~)
源码参考:
使用python将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。应该要怎么做?
对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果nk,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
程序源代码:
实例(Python 2.0+)
#!/usr/bin/python
# -*- coding: UTF-8 -*-
def reduceNum(n):
print '{} = '.format(n),
if not isinstance(n, int) or n = 0 :
print '请输入一个正确的数字 !'
exit(0)
elif n in [1] :
print '{}'.format(n)
while n not in [1] : # 循环保证递归
for index in xrange(2, n + 1) :
if n % index == 0:
n /= index # n 等于 n/index
if n == 1:
print index
else : # index 一定是素数
print '{} *'.format(index),
break
reduceNum(90)
reduceNum(100)
以上实例输出结果为:
90 = 2 * 3 * 3 * 5100 = 2 * 2 * 5 * 5