UVA12546_LCM Pair Sum
题目的意思是求 [西伽马(p+q)]其中lcm(p,q)=n。
又见数论呀。
其实这个题目很简单,考虑清楚了可以很简单的方法飘过。
我一开始是这样来考虑的。
对于每一个单独的质因子,如果为p,它的次数为x,那么在p和q中一定有一个为p^x,另一个为p^y(0<=y<=x),只有这样才能保证lcm为p^x。
这样我们可以枚举第一个为p^x,第二个数就是等比数列求和了。
同时我们再枚举第二个为p^x,这样我们就又是等比数列求和了。。。。
这样我们每次分别计算每一个质因子,同时每一个质因子其实是相对独立的,所以我们最后只要做一次乘法就可以了。不过注意每一个质因子出现的次数哦。
嗯到了这里我们就可以知道了,不过对于每一个答案还是统计了两遍,所以要把多出来的减出来。
嗯,大概就是这样的。
但是A掉后,我好像又秒懂了更更简单的办法。诶,深坑啊。自己考虑考虑就知道啦。。。
这个是经过预处理之后才勉强A掉的,内牛满面啊。。。。。——————————
#include <iostream>
#include <cstring>
#include <cstdio>
#define ll long long
#define M 1000000007
using namespace std; ll t,c,p[],a[],cas=;
ll ans;
ll f1[],f2[],f3[]; ll power(ll x,ll y)
{
ll tot=;
while (y)
{
if (y&) tot=(tot*x)%M;
y>>=;
x=(x*x)%M;
}
return tot;
} ll mod(ll x)
{
if (x<M) return x;
x-=M;
if (x<M) return x;
return x-M;
} ll count(ll x)
{
ll A=,B=,F,G;
for (ll i=; i<=c; i++)
{
if (x&(<<(i-)))
{
F=(f1[i]*(a[i]+))%M;
G=((f2[i]-)*(f3[i]))%M;
}
else
{
F=((f1[i]-)*(f3[i]))%M;
G=(f1[i]*(a[i]))%M;
}
A=(A*F)%M;
B=(B*G)%M; //cout<<" a: & b: "<<A<<' '<<B<<endl;
}
return mod(A+B);
} ll over=power(,M-); int main()
{
scanf("%lld",&t);
while (t--)
{
ans=;
scanf("%lld",&c);
for (ll i=; i<=c; i++) scanf("%lld%lld",&p[i],&a[i]);
for (ll i=; i<=c; i++)
{
f1[i]=power(p[i],a[i]);
f2[i]=power(p[i],a[i]+);
f3[i]=power(p[i]-,M-);
}
//ans=count(1<<(c)-1); cout<<"ans : "<<ans<<endl;
for (ll i=; i<(<<c); i++) ans=mod(ans+count(i));
ll tep=;
for (ll i=; i<=c; i++) tep=(tep*f1[i])%M;
ans=mod(ans+*tep);
ans=(ans*over)%M;
if (ans<) ans+=M;
printf("Case %lld: %lld\n",++cas,ans);
}
return ;
}
UVA12546_LCM Pair Sum的更多相关文章
- uva12546. LCM Pair Sum
uva12546. LCM Pair Sum One of your friends desperately needs your help. He is working with a secret ...
- bzoj3114 LCM Pair Sum
题意:以质因数分解的方式给定n,求所有满足:lcm(a, b) = n的无序数对的价值和.其中(a, b)的价值为a + b 解: 定义首项为a,公比为q,项数为n的等比数列的和为getQ(a, q, ...
- light oj 1236 - Pairs Forming LCM & uva 12546 - LCM Pair Sum
第一题给定一个大数,分解质因数,每个质因子的个数为e1,e2,e3,……em, 则结果为((1+2*e1)*(1+2*e2)……(1+2*em)+1)/2. 代码如下: #include <st ...
- Subarray Sum Closest
Question Given an integer array, find a subarray with sum closest to zero. Return the indexes of the ...
- LeetCode 1099. Two Sum Less Than K
原题链接在这里:https://leetcode.com/problems/two-sum-less-than-k/ 题目: Given an array A of integers and inte ...
- [LC] 1099. Two Sum Less Than K
Given an array A of integers and integer K, return the maximum S such that there exists i < j wit ...
- 【LeetCode】1099. Two Sum Less Than K 解题报告(C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 暴力求解 日期 题目地址:https://leetco ...
- Java中的泛型 (上) - 基本概念和原理
本节我们主要来介绍泛型的基本概念和原理 后续章节我们会介绍各种容器类,容器类可以说是日常程序开发中天天用到的,没有容器类,难以想象能开发什么真正有用的程序.而容器类是基于泛型的,不理解泛型,我们就难以 ...
- 三维网格精简算法(Quadric Error Metrics)附源码
在计算机图形应用中,为了尽可能真实呈现虚拟物体,往往需要高精度的三维模型.然而,模型的复杂性直接关系到它的计算成本,因此高精度的模型在几何运算时并不是必须的,取而代之的是一个相对简化的三维模型,那么如 ...
随机推荐
- PostgreSQL Streaming Replication的FATAL ERROR
磨砺技术珠矶,践行数据之道,追求卓越价值回到上一级页面: PostgreSQL集群方案相关索引页 回到顶级页面:PostgreSQL索引页[作者 高健@博客园 luckyjackgao@gm ...
- CF 96 D. Volleyball
D. Volleyball http://codeforces.com/contest/96/problem/D 题意: n个路口,m条双向路,每条长度为w.每个路口有一个出租车司机,最多可以乘坐这辆 ...
- .net core 无法获取本地变量或参数的值,因为它在此指令指针中不可用,可能是因为它已经被优化掉了
使用vs 发布.net CORE 项目,调试遇到了“无法获取本地变量或参数的值,因为它在此指令指针中不可用,可能是因为它已经被优化掉了”这个问题,弄了半天才发现是发布的时候没有设置为debug,做个总 ...
- Android:制作聊天气泡点9图
步骤一:选择res下的一张图片,右击选择“Create 9-Patch File” 步骤二:确定点9图的名字,只能修改.9.png之前的信息 步骤三:在同目录下会生成刚才创建的点9图,双击打开进行编辑 ...
- 利用存储过程生成大量的数据(oracle,mysql)
在进行查询操作的性能测试时,往往需要测试大数据量模式下的查询功能的性能,这是就需要我们去创造一些测试数据来填充数据库,来模拟真是环境,造数据的方式有很多种,可以使用loadrunner,jmeter等 ...
- Mac下重置MySQL密码
第一步要先停止掉mysql服务: brew services stop mysql 第二步查看mysql安装路径: brew info mysql //我这里是brew管理的所以我用brew查看mys ...
- 帮你理解学习lambda式
概要 窗前明月光,疑是地上霜,举头望明月,低头思故乡.别误会这是开头诗与以下文章没任何关系. 今天我想给大家说道说道 C# lambda表达式,不废话,下面开始说道! lambda lambd ...
- python简介、第一个python程序、变量、字符编码、用户交互程序、if...else、while、for
也愿大家永葆初心-- 已识乾坤大,犹怜草木青. 一.python简介 首先,我们普及一下编程语言的基础知识.用任何编程语言来开发程序,都是为了让计算机干活,比如下载一个MP3,编写一个文档等等,而计算 ...
- 【TCP_协议_socket接口】-jmeter
1.ip 2.端口号 3.传入参数 4.告诉软件返回 最后以为是什么,不然就会报错 或者无限制的等待 查ascll 码表 启动接口的方法
- 华为笔试——C++特定位数比较
题目:特定位数比较 题目介绍:输入两行数据,第一行为 m 个正整数,以空格隔开:第二行为正整数 n ,且 n<= m:要求对第一行的数字的后三位大小进行排序,输出排行 n 的数字,其中,若不满三 ...