hdu 5108 Alexandra and Prime Numbers(唯一分解定理)
阿新 • • 發佈:2018-12-12
【唯一分解定理】
任意一個大於1的正整數都能表示成若干個質數的乘積,且表示的方法是唯一的。換句話說,一個數能被唯一地分解成質因數的乘積。因此這個定理又叫做唯一分解定理。
公式:n = P1^a1 * P2^a2 * …………* (P1 < P2 < ……Pn);
【題目】
【題意】
給定一個n,求最小因子ans使得n/ans是素數。
【思路】
根據唯一分解定理求最大素因子。
【程式碼】
#include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <cstdlib> #include <map> #include <list> #include <vector> #include <stack> #include <queue> #include <algorithm> #include <iostream> #define mem(a) memset(a,0,sizeof(a)) #define go(i,a,b) for(int i=a;i<=b;i++) #define og(i,a,b) for(int i=a;i>=b;i--) using namespace std; const int N=1e6; const int inf=0x3f3f3f3f; typedef long long ll; typedef unsigned long long ull; main() { ll n; while(~scanf("%lld",&n)) { if(n==1) { printf("0\n"); continue; } int m=sqrt(n),t=n,r=1; for(ll i=2;i<=m;i++) { while(t%i==0) { t/=i; r=i; } } printf("%lld\n",n/max(t,r)); } }