python求約數的個數


題目:輸入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
View Code

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);
        }



    }
}
View Code

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM