1. 程式人生 > >SICAU-OJ: A|B

SICAU-OJ: A|B

A|B

題意:

給出一個整數n(1<=n<=10100),求Σd(d滿足d可以整除n),同時保證不存在x^2有x^2可以整除n。

另外,n的質因子滿足小於等於1000。

 

題解:

這題是我第一道用python做的題...畢竟大數C寫起來還是挺麻煩的。

根據唯一分解定理我們知道n=p1^a1*p2^a2*....*pn^an,再來看條件,我們知道這裡的p1...pn都是小於等於1000的。

另外,由不存在x^2可以整除n可知:a1=a2=...=an=1。

倘若at>1,那麼一定有一個x^2是n的因子。畢竟n是由這些數給乘起來的。

最後我們統計答案時,計算(p1+1)*(p2+1)*....*(pn+1)就行了,可以十分方便地計算出所有的情況。

 

程式碼如下:

prim=[]
vis=[]
for i in range(1000):vis.append(0)
for i in range(2,1000):
    if(not vis[i]):
        prim.append(i)
        for j in range(i*i,1000,i):
            vis[j]=1;
t=int(input())
while(t):
    t-=1
    need=[]
    sum=1
    n=int(input())
    l = len(prim)
    for
i in range(l): if(n%prim[i]==0): need.append(prim[i]) l=len(need) for i in range(l): sum*=(need[i]+1) print(sum)