【唯一分解定理】
任意一个大于1的正整数都能表示成若干个质数的乘积,且表示的方法是唯一的。换句话说,一个数能被唯一地分解成质因数的乘积。因此这个定理又叫做唯一分解定理。
公式:n = P1^a1 * P2^a2 * …………* (P1 < P2 < ……Pn);
【题目】
hdu 5108 Alexandra and Prime Numbers
【题意】
给定一个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));
}
}