uva 10791
来源:互联网 发布:java培训4个月靠谱吗 编辑:程序博客网 时间:2024/05/29 17:53
https://vjudge.net/problem/UVA-10791
题意: 给出一个n,是至少两个数的lcm,求这些数加起来的最小的和;
分析: 分解为素因子相乘的式子,因为lcm(a,b) = p1^max(a1,b1) * p2^max()……;
所以要使得这些数加起来最小,每个数分配一个因子就行
#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>using namespace std;typedef long long ll;const ll maxn = 1000000 + 10;#define INF 0x3f3f3f3fbool is_prime[maxn];ll prime[maxn];ll Init(){ll len = 0;memset(is_prime,true,sizeof(is_prime));for(ll i = 2; i < maxn; i ++){if(is_prime[i])for(ll j = i * 2; j < maxn; j += i)is_prime[j] = false;prime[len ++] = i;}return len;}ll data[maxn];ll num[maxn];ll work(ll n){memset(num,0,sizeof(num));ll len = 0;for(ll i = 0; prime[i] * prime[i] <= n; i ++){if(n % prime[i] == 0){data[len] = prime[i];while(n % prime[i] == 0){ num[len] ++;n /= prime[i];}//cout << data[len] << " " << num[len] << endl;len ++;}}if(n > 1){data[len] = n;num[len ++] = 1;}return len;}int main(){ll len = Init();ll Tcase = 1;ll n;while( ~ scanf("%I64d",&n) && n){cout << "Case "<< Tcase ++ <<": ";ll lens = work(n);ll ans = 0;for(ll i = 0; i < lens ; i ++){ans += pow(data[i],num[i]);}if(lens == 0){cout << 2 << endl;continue;}else if(lens == 1){cout << ans + 1 << endl;continue;}cout << ans << endl;}return 0;}
0 0
- uva 10791
- uva 10791
- Uva 10791
- UVA 10791
- UVA 10791
- uva 10791
- UVA 10791
- uva 10791
- UVA 10791
- uva 10791 溢出
- Uva 10791MininumSumLCM
- uva
- UVA
- UVA
- UVA
- uva
- UVA
- UVA
- python 要点1
- 自己最近的一些小体会和心得
- servlet定时刷新
- git使用配置图解步骤
- 机器学习笔记(十一)实践之数据竞赛的套路
- uva 10791
- M--二分查找
- ZOJ 2972 Hurdles of 110m
- 浅析套接字中SO_REUSEPORT和SO_REUSEADDR的区别
- POJ 2105 IP Address G++
- ”Mac下bash_profile添加错误环境变量导致path涉及的命令全不能使用“的解决方案
- 层次遍历二插树
- 获取APP的版本号
- C语言的编码规范