hdu 4944 FSF’s game(数论)
2015-06-30 15:40
176 查看
题目链接:hdu 4944 FSF’s game
题目大意:给定N,能够用不大于N的长a和宽b。组成N∗(N−1)2种不同的矩形,对于每一个矩形a∗b要计算它的值,K为矩形a,b能够拆分成若干个K∗K的正方形。∑a∗bgcd(a/k,b/k),输出全部矩形值的和。
解题思路:如果有边a和b。那么k肯定即使a的因子也是b的因子。
定义f(n)为矩形最长边等于n的情况下全部矩形值的和。那么f(n)=val(1∗n)+val(2∗n)+⋯+val(n∗n),枚举n的因子作为k,如今如果有因子k,使得n=k∗a:
g(k)=1∗k∗nk+2∗k∗nk+⋯+a∗k∗nk
=1∗n+2∗n+⋯+a∗n
=(1+a)∗a2∗n
f(n)=∑g(k)(k为n的因子)
然后用类似素数筛选法的方式处理处f(i)的值。相应再累加即使答案。
题目大意:给定N,能够用不大于N的长a和宽b。组成N∗(N−1)2种不同的矩形,对于每一个矩形a∗b要计算它的值,K为矩形a,b能够拆分成若干个K∗K的正方形。∑a∗bgcd(a/k,b/k),输出全部矩形值的和。
解题思路:如果有边a和b。那么k肯定即使a的因子也是b的因子。
定义f(n)为矩形最长边等于n的情况下全部矩形值的和。那么f(n)=val(1∗n)+val(2∗n)+⋯+val(n∗n),枚举n的因子作为k,如今如果有因子k,使得n=k∗a:
g(k)=1∗k∗nk+2∗k∗nk+⋯+a∗k∗nk
=1∗n+2∗n+⋯+a∗n
=(1+a)∗a2∗n
f(n)=∑g(k)(k为n的因子)
然后用类似素数筛选法的方式处理处f(i)的值。相应再累加即使答案。
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; typedef unsigned long long ll; const ll MOD = 1LL<<32; const int maxn = 500000; ll f[maxn+5], s[maxn+5]; void init () { memset(f, 0, sizeof(f)); s[0] = f[1] = 0; for (int i = 1; i <= maxn; i++) { for (int k = 1; k * i <= maxn; k++) { f[k*i] += (1LL + k) * k / 2; f[k*i] %= MOD; } f[i] = f[i] * i % MOD; } for (ll i = 1; i <= maxn; i++) s[i] = (s[i-1] + f[i]) % MOD; } int main () { init(); int cas, n; scanf("%d", &cas); for (int kcas = 1; kcas <= cas; kcas++) { scanf("%d", &n); printf("Case #%d: %I64u\n", kcas, s ); //printf("Case #%d: %lld\n", kcas, s ); } return 0; }
相关文章推荐
- oracle 抛出自定义错误(网上找的例子)
- Laravel5.1学习笔记12 系统架构4 服务容器
- 黑马程序员---ArrayList遍历的三种方式
- 电子词典
- 二叉树的三种遍历方式的递归实现和非递归实现
- iOS企业证书网页分发全过程详解(图文并茂史无前例的详细哦)
- mybatis 缓存
- grails 冷门问题汇总
- getOutputStream() has already been called for this response异常的原因和解决方法
- 计算机中丢失 msvcr110.dll 怎么办
- saltstack内置state模块user
- android EditText控件可输入正负数及小数位
- 匈牙利算法
- matlab条形图绘制函数用法
- Pro Android学习笔记(一六八):发布应用(1):测试和适配
- JavaScript学习记录总结(七)——dom对象应用之用户简单管理
- (HTML)A标签伪元素选择器的继承关系
- Laravel5.1学习笔记11 系统架构3 服务提供者
- C++数据类型
- 作业6.14