題目:輸入n個整數,依次輸出每個數的約數的個數(運行時間1500ms)

import os def count(x): factor = 2 num = 1 while (factor * factor <= x): count = 1 while (x % factor == 0): count += 1 x /= factor num *= count factor += 1 return (num * (1 + (x > 1))) try: n = int(input()) # 行數 if(n!=0): #if(n>0 and n<=1000): s = list(map(int, input().split())) #print(s) else: os._exit(0) for item in s: it=count(item) print(it) except: pass
python計算約數個數的方法:
轉自:http://bookshadow.com/weblog/2016/11/27/python-divisor-count/
- 從1到n枚舉,判斷是否可以整除 時間復雜度O(n)
def countDivisors(num): return sum(num % i == 0 for i in range(1, num + 1))
- 從1到sqrt(n)枚舉,判斷是否可以整除
def countDivisors(num): cnt = 0 sqrt = int(num ** 0.5) for x in range(1, sqrt + 1): if num % x == 0: cnt += 1 return cnt * 2 - (sqrt ** 2 == num)
- 分解質因子,求冪的乘積
def countDivisors(num): ans = 1 x = 2 while x * x <= num: cnt = 1 while num % x == 0: cnt += 1 num /= x ans *= cnt x += 1 return ans * (1 + (num > 1))
李旭的java代碼(運行時間200ms)為什么這個這么快呢

public class yue { public static void main(String[] args) { System.out.println("N:"); Scanner sc = new Scanner(System.in); int n =sc.nextInt(); int []a=new int[n]; for (int i=0;i<n;i++){ a[i]=sc.nextInt(); } for(int i=0;i<n;i++){ int num=0; for(int j=1;j*j<=a[i];j++){ if(j*j==a[i]) { num++; }else if(a[i]%j==0){ num+=2; } } System.out.println(num); } } }