acm_数学
GrimCake
这个作者很懒,什么都没留下…
展开
-
UVa-11388 GCD LCM
一开始想复杂了,若a,b都是G的倍数,则L也是G的倍数,所以如果L%G!=0,那么一定不存在,且发现a=G,b=L #include #include #include using namespace std; int main(){ int T; long long G,L; cin>>T; while(T--){ cin>>G>>L; if(L%G!=0) cout<<"-原创 2017-02-20 20:22:06 · 346 阅读 · 0 评论 -
UVa-10892 LCM Cardinality
先把n的因子全部列出来并从小到大排序,然后枚举 这里用到一个结论,两个数的乘积等于这两个数最小公倍数和最大公因数的乘积 #include #include #include #include using namespace std; long long d[1005]; int m; void div(long long k){ m=0; long long t=sqrt(k); for原创 2017-02-21 20:03:58 · 319 阅读 · 0 评论 -
UVa-11076 Add Again(平均数思想)
思路:平均数思想 由于每个数出现在各个位的次数是一样的, 所以ans=每个位的平均数*排列数*n个1 如1 1 2 2 ans=((1+1+2+2)/4) * (A(4,4)/(A(2,2)*A(2,2)))*1111 #include #include #include #include using namespace std; const long long原创 2017-02-21 23:09:33 · 234 阅读 · 0 评论 -
UVa-11609 Teams(组合+快速幂)
F(n) = C(n,1)*1 + C(n,2)*2 + ... = sum(C(n,i)*i)=n * 2^(n-1) #include #include #include #include #define ll long long #define mod 1000000007 using namespace std; ll ppow(ll x,ll n) { ll tp=1;原创 2017-02-21 23:36:17 · 305 阅读 · 0 评论 -
poj1032 整数拆分
将一个整数拆分为若干个不同整数之和,且使得这若干个不同的整数的乘积最大 算法:如n=7 =2+3+2 把2分为两个1,从后往前加即2+1=3,3+1=4 故答案为3 4 如n=8=2+3+3 把3分为三个1,先加一轮 即3+4+1,再把1从后往前加即3+5 故答案为3 5 如n=17=2+3+4+5+3=2+4+5+6 故答案为2 4 5 6原创 2017-01-25 22:03:32 · 422 阅读 · 0 评论 -
UVa-11038 How Many O's? (整数区间分解)
这类题大的方向都是写一个函数f(n)表示1到n中所有的数一共有多少个0,那么最终的答案就是f(n)-f(m-1)所以关键就是如何写f,这是一个神奇的方法。。。 首先比如n=12345,把其中一位数假设为0,那么这位数左边的种数*右边的种数就等于当这位数确实为0时所需要写下的0的个数 具体一点: mid left right原创 2017-02-22 22:23:53 · 477 阅读 · 0 评论 -
UVa-10883 Supermean(二项式系数)
找规律可得答案为k=C(n-1,i)*a[i]/2^n-1 (0 #include #include #include #include #define ll long long #define mod 1000000007 using namespace std; double a[50005],log_c[50005]; int main(){ int T,n; double a原创 2017-02-23 20:25:55 · 573 阅读 · 0 评论 -
LightOJ - 1370(欧拉函数)
题意:给定一个序列,对于每一个元素ai,求一个xi使得phi(xi)>=ai,最后将xi求和。分析:由欧拉函数性质可知,当x为素数时,phi(x) = x-1,即x-1>=ai,x>=ai+1。于是只要找到大于等于ai的第一个素数即可。且在任意两个相邻质数x,x+1之间的合数y,有phi(y)<phi(x)<phi(x+1),所以答案不可能是一个合数,就算phi(y)...原创 2018-06-20 15:41:02 · 572 阅读 · 2 评论