思路就是把a分解質因數,對於乙個質因數a1p1,會是a的因數多(p1+1)倍(不選或者選幾個,乘法法則),對於每個因數,都會有另乙個因數與他乘在一起結果是a,所以我們求出因數的個數之後除以2即可得出組合的數量,然後對於給的範圍,0~b中每有乙個因數,組合的數量便會減一。
如果我們需要對n分解質因數,只要把質數表打到n1/2即可,因為不可能有兩個質因數都大於n1/2。
#include #include #include #include #include #include #include #include #include using namespace std;
#define ll long long
const ll n = 1e6+7;
#define inf 0x3f3f3f3f
ll n,m;
ll prime[n];
bool vis[n];
void shai(ll n)}}
}ll top;
void insert()
ll tmp = n;
ll ans = 1;
for(i=0; i <= top && prime[i]*prime[i] <= tmp;i++)
ans *= (cnt + 1);}}
if(tmp > 1)
ans /= 2;//順便消去25的5這樣的因數
for(i=1;i}
printf("case %d: %lld\n",cases,ans);
}return 0;
}
Lightoj 1341 質因子分解
題意 給出乙個長方形的面積,然後求長和寬都不能小於m的方案數。思路 先對這個面積進行質因子分解,得到這個數的所有的因子數,然後因為是不能是正方形,所以他能組成的方案書為因子數 2,要得到大於等於m的話,直接減去小於m的數。注意剛開始要判斷m m 是否是小於等於n,這樣的話m就小於等於1e6了,不會超...
LightOJ 1341 因數分解
題意 求區間 a,b 中b的因數對數有幾個,x,y 和 y,x 算一對。因為x和y的範圍是1e12,那麼我們根據唯一分解定理,只需要求1到1e6範圍內的質因數即可。然後根據乘法原理 ans ans 質因數指數 1 最後ans除以2,就是b的所有因數對數。然後用ans減去,小於a的對數就是我們要求的答...
LightOJ 1116 唯一分解定理
題意 給乙個w,然後分為n m形式,n為奇數,m為偶數,問你是否有解,如果有解,輸出的答案m盡可能小。如果w是奇數肯定無解,因為偶數 奇數只能得到偶數。當w為偶數時,根據唯一分解定理,它的偶數質因子只有2,我們只要找到2的個數,然後全給m,剩下的全給n即可。include include inclu...