Python 计算当真因子个数为偶数个时为幸运数,计算区间内幸运数之和
晚饭后朋友发来个问题,正好无事做,动手写了一下
若一个正整数有偶数个不同的真因子,则称该数为幸运数。如4含有2个真因子为 1 和 2 。故4是幸运数。求【2,100】之间的全部幸运数之和。
常规思路
被除数一直除以 1 2 3 ... 直到除以它自身,不过这种比较消耗资源(周知python简洁但效率不高)
getf.py
def get_Factor(x):
"""
n 需要求真因数的数(被除数) x
x 除数 y
rem 余数
quo 商
"""
if x == 0: return [0]
if x == 1: return [1]
f_list = []
for y in range(1,x):#定义y是除数
rem = x % y
quo = x // y
if rem == 0:# 如果x可以被y整除
if y not in f_list:
f_list.append(y)
if quo not in f_list:
f_list.append(quo)
continue
continue
continue f_list.sort(reverse = False)
f_list.pop()
#是一个一个加进去,排个序后删除本身
return x , f_list def get_Luckynum(a, b):
Luckynum = []
for i in range(a,b+1):
i,f_list = get_Factor(i)
if len(f_list) % 2 == 0:
Luckynum.append(i)
# print(i,"的真因数:",f_list,"个数为",len(f_list),"个,■■是■■")
# else:
# print(i,"的真因数为:",f_list,"个数为",len(f_list),"个,♦♦不是♦♦") return Luckynum, sum(Luckynum)
main.py
# -*- coding: utf-8 -*-
"""
Created on Fri Apr 19 19:32:33 2019 @author: Administrator
"""
import getf a = int(input("请输入最小值:"))
b = int(input("请输入最大值:"))
Luckynum, sum_Luckynum = getf.get_Luckynum(a,b)
print('区间 [{0},{1}] 的幸运数包含:{2}'.format(a, b, Luckynum))
print('它们的总和是:{0}'.format(sum_Luckynum))

另一个思路:被除数区间的定义
稍微思考一下
a*b = c a变大b就会变小 a变小b就会变大
假设a永远是最小 b永远是最大的哪个
那么 a 和 b 的它们最大值,肯定是 √c
该思路就是让 c 求商的时候,不用像常规思路一般一直除到本身(如65,要除以1..2..3..4......65 )资源消耗大,效率低下
而是一直除到 √c (如65,要除以1..2..3..4...一直到√65 就停止遍历)
当然 遍历到 √c 的时候 a = b 这个就在加个判断就好了,不允许重复
如下
import math def new_get_Factor(x):
if x == 0: return [0]
if x == 1: return [1]
f_list = []
for y in range(1,int(math.sqrt(x)) + 1):
#(1,根号x+1)确保能够遍历到根号x
rem = x % y
quo = x // y
if rem == 0:
f_list.append(y)
if y != quo:
f_list.append(quo)
continue
continue f_list.sort(reverse = False)
f_list.pop()
return x,f_list
Python 计算当真因子个数为偶数个时为幸运数,计算区间内幸运数之和的更多相关文章
- SPOJ DQUERY 求区间内不同数的个数 主席树
这题跟HDU3333差不多吧. 离线的做法很简单,不再说了 以前做过. 主席树的做法就比较暴力了.. 什么是主席树呢.. 其实是某种称号. 在该题中的体现是可持久化的线段树. 对于一个数 如果以前没出 ...
- SPOJ 3267 D-query(离散化+主席树求区间内不同数的个数)
DQUERY - D-query #sorting #tree English Vietnamese Given a sequence of n numbers a1, a2, ..., an and ...
- 【树状数组】区间出现偶数次数的异或和(区间不同数的异或和)@ codeforce 703 D
[树状数组]区间出现偶数次数的异或和(区间不同数的异或和)@ codeforce 703 D PROBLEM 题目描述 初始给定n个卡片拍成一排,其中第i个卡片上的数为x[i]. 有q个询问,每次询问 ...
- LightOj1028 - Trailing Zeroes (I)---求因子个数
题目链接:http://lightoj.com/volume_showproblem.php?problem=1028 题意:给你一个数 n (1<=n<=10^12), 然后我们可以把它 ...
- POJ 2992 求组合数的因子个数
求C(n,k)的因子个数 C(n,k) = (n*(n-1)*...*(n-k+1))/(1*2*...*k) = p1^k1 * p2^k2 * ... * pt^kt 这里只要计算出分子中素数因子 ...
- Divisors_组合数因子个数
Description Your task in this problem is to determine the number of divisors of Cnk. Just for fun -- ...
- POJ 2992 Divisors (求因子个数)
题意:给n和k,求组合C(n,k)的因子个数. 这道题,若一开始先预处理出C[i][j]的大小,再按普通方法枚举2~sqrt(C[i][j])来求解对应的因子个数,会TLE.所以得用别的方法. 在说方 ...
- Factors of Factorial AtCoder - 2286 (N的阶乘的因子个数)(数论)
Problem Statement You are given an integer N. Find the number of the positive divisors of N!, modulo ...
- 第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛-等式(求$N^2$的因子个数)
一.题目链接 https://www.nowcoder.com/acm/contest/90/F 二.题面 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言655 ...
随机推荐
- (60)Wangdao.com第十天_JavaScript 函数_作用域_闭包_IIFE_回调函数_eval
函数 实现特定功能的 n 条语句封装体. 1. 创建一个函数对象 var myFunc = new Function(); // typeof myFunc 将会打印 function ...
- swust oj 982
输出利用二叉树存储的普通树的度 1000(ms) 10000(kb) 2619 / 5991 普通树可转换成相应的二叉树(该二叉树的根结点一定缺少右儿子),反之亦然.故而可以根据相应的转换方法去统计某 ...
- 黑盒测试实践-day02
一.任务进展情况 了解测试环境,分析测试步骤. 二.存在的问题 对测试软件还不是很了解 三.解决方法 主要查看网上资料,请求同学帮助 四.下一步计划 先熟悉测试软件,然后进行下一步.
- Java常用类库 读书笔记 一
1.String Buffer 类 String 类所表示的字符串有一个局限就是字符串常量一旦声明则不可改变,只有内存地址的指向可以改变,如果要频繁修改字符串,需要使用String Buffer 类. ...
- tshark的抓包和解析
1. a.解析dhcp抓包文件 -r 读抓好的数据包文件 tshark -r 数据包路径 -Y 过滤条件 基本上可以运用 wirshark上的过滤条件 查找中继后dhc ...
- oo第二单元作业总结
oo第二单元博客总结 在第一单元求导结束后,迎来了第二单元的多线程电梯的问题,在本单元前两次作业中个人主要应用两个线程,采用“生产者-消费者”模式和共享数据变量的方式解决问题.在第三次作业中加入多个电 ...
- cve-2018-4878漏洞复现
CVE-2018-4878Flash 0day漏洞1.漏洞概述2018年2月1号,Adobe官方发布安全通报(APSA18-01),声明Adobe Flash 28.0.0.137及其之前的版本,存在 ...
- Linux基础命令1
文件的操作: Tab键:自动补齐 反斜杠‘\’:强制换行 Ctrl+u:清空至行首 Ctrl+k:清空至行尾 Ctrl+l:清屏 --clear 清屏 Ctrl+c:取消本次命令编辑,中断当前操作 ...
- 马拉车算法,mannacher查找最长回文子串
作用: 在线性时间内找到一个字符串的最大回文子串 原理: 奇偶变换:为处理字符串方便,现将给定的任意字符串进行处理,使所有可能的奇数/偶数长度的回文子串都转换成了奇数长度. 具体就是在每个字符的两边都 ...
- webpack入门操作教程
1. webpack介绍 在传统的项目中,一个html文件可能会加载多个js.css文件,如果多人协同开发的话,就会出现全局变量被污染.文件直接的依赖问题 而webpack打包工具,会先分析入口文件的 ...