紫书 例题 10-3 UVa 10375 (唯一分解定理)
2024-10-21 06:18:29
这道题感觉非常的秀
因为结果会很大,所以就质因数分解分开来算
非常的巧妙!
#include<cstdio>
#include<vector>
#include<cstring>
#include<cmath>
#define REP(i, a, b) for(int i = (a); i < (b); i++)
using namespace std;
const int MAXN = 11234;
bool is_prime[MAXN];
vector<int> prime;
int e[MAXN];
void init() //初始化质数
{
memset(is_prime, true, sizeof(is_prime));
is_prime[0] = is_prime[1] = false;
REP(i, 2, MAXN)
{
if(is_prime[i]) prime.push_back(i);
REP(j, 0, prime.size())
{
if(i * prime[j] > MAXN) break;
is_prime[i * prime[j]] = false;
if(i % prime[j] == 0) break;
}
}
}
void add_integer(int n, int d) //表示把n的d次方质因数分解,结果存到数组e里面
{ //例如d = 1表示乘以n,d = -1表示除以n
REP(i, 0, prime.size()) //需要预处理好素数
{
while(n % prime[i] == 0) //注意这里是while
{
n /= prime[i];
e[i] += d; //e[i]表示第i个素数的幂
}
if(n == 1) break; //节省时间
}
}
void add(int n, int d) { REP(i, 2, n + 1) add_integer(i, d); }
int main()
{
init();
int p, q, r, s;
while(~scanf("%d%d%d%d", &p, &q, &r, &s))
{
memset(e, 0, sizeof(e));
add(p, 1); add(q, -1); add(p-q, -1);
add(r, -1); add(s, 1); add(r-s, 1);
double ans = 1;
REP(i, 0, prime.size()) ans *= pow(prime[i], e[i]);
printf("%.5lf\n", ans);
}
return 0;
}
最新文章
- 用 const 还是用 let?
- 复旦大学2015--2016学年第一学期高等代数I期末考试情况分析
- repcache实现memcached主从
- 特殊js事件
- jQuery easyUI datagrid 增加求和统计行 分类: JavaScript 2015-01-14 17:46 2178人阅读 评论(0) 收藏
- 【百度SEO优化】如何让蜘蛛爬行你的网站
- Kafka Quick Start
- Sass&;Compass学习笔记(一)
- PHP 关于 $GLOBALS[&#39;HTTP_RAW_POST_DATA&#39;]
- swift 关于 toolbar 学习笔记
- 山寨游戏的未来Apple App Store
- angular.js之作用域scope&#39;@&#39;,&#39;=&#39;,&#39;&;&#39;
- CATransition
- BELLMEN-FORD普通
- ArcGis 制图——地图图框整饰的插件式实现(一)C#
- js 获取浏览器大小,屏幕大小等。
- 【JMeter】基础元件
- mac nginx 安装教程
- TFS 切换登录用户的方法[转]
- JQuery.extend扩展实现同步post请求
热门文章
- APICloud 上滑加载更多
- python安装Redis数据库
- 关于npm警告fsevents和vue-cli项目中的一些问题,持续更新
- S5PV210 三个Camera Interface/CAMIF/FIMC的区别
- [宏]_IO, _IOR, _IOW, _IOWR 宏的用法与解析
- 使用展开操符作替代 .apply() (prefer-spread)
- HDU 4828
- Android.mk添加本地程序和库的经常使用模版
- iOS 系统地图实现及定位
- 朝花夕拾——finally/final/finalize拨云雾见青天