1. 程式人生 > >UVA 10791 (唯一分解定理)

UVA 10791 (唯一分解定理)

記錄一下唯一分解定理的應用

#include <iostream>
#include <algorithm>
#include <queue>
#include <stack>
#include <cstdio>
#include <string>
#include <cstring>
#include <vector>
#include <set>
#include <cmath>
#define LL long long
#define INF 0x3f3f3f3f
#define mod 1000000007
const int maxn = 1000000 + 5; using namespace std; LL a[maxn]; int solve(LL n){ int cnt = 0; if(n == 1) return 1; LL m = (int)sqrt(n+0.5); for(LL i=2; i<=m; i++){ if(n % i == 0){ LL ans = 1; while(n % i == 0){ n /= i; ans *= i; } a[cnt++] = ans; } } if
(n > 1) a[cnt++] = n; return cnt; } int main(){ LL n; int kases = 1; while(scanf("%lld",&n) == 1 && n){ LL ans = 0; int sum = solve(n); if(sum == 1){ ans = n + 1; } else{ for(int i=0; i<sum; i++) ans += a[i]; } printf
("Case %d: %lld\n",kases++,ans); } }