xdoj-1022-A simple math problem 2 // 太强了
//其实题目中f[n]的值可理解为存在多少个整数对使a*b<=n
#include<cstdio>
#define N 1007
#define maxn 1000005
using namespace std;
int f[maxn];
void Procede(int n)//预处理
{
for(int i=;i<maxn;i++){
for(int j=i;j<maxn;j+=i){
f[j]++;
}
}
//此时f[n]理解为表示n的约数的个数,亦可以理解为表示存在多少对整数对(a,b)恰好满足a*b=n f[1]=1,f[2]=2,f[3]=2,f[8]=4,f[10]=3
for(int j=;j<maxn;j++){
f[j]=(f[j-]+f[j])%N;
}//f[n]此时表示存在多少对整数对(a,b)满足a*b<=n,即求了一次前缀和,f[1]=1,f[2]=3,f[3]=5
for(int j=;j<maxn;j++){
f[j]=(f[j-]+f[j])%N;
}
}//此时f[n]表示题目中的sum(1,n),即又求了一次前缀和,f[1]=1,f[2]4,f[3]=9
int main()
{
int a,b;
Procede(maxn);
while(scanf("%d%d",&a,&b)!=EOF)
{
int ans=(f[b]-f[a-]+N)%N;
printf("%d\n",ans);
}
}
这是别人的诗,下面是我的辣鸡代码
#include<cstdio>
#include<iostream>
using namespace std;
const int N=1e6+;
const int mod=;
int p[N];
int dp[N];
int sum[N];
int main ()
{
for (int i=;i<=N;i++) {
if (!p[i]) p[++p[]]=i;
for (int j=;j<=p[]&&i*p[j]<=N;j++) {
p[i*p[j]]=;
if (i%p[j]==) break;
}
} /* 筛选出素数*/
dp[]=;
sum[]=;
int x;
for (int u=;u<=;u++) {
x=u;
int i=;
int ans=;
while (p[i]*p[i]<=x) {
if (x%p[i]==) {
int k=;
while (x%p[i]==) {k++;x=x/p[i];}
ans=ans*(k+);
}
i++;
}
if (x!=) ans=*ans;
dp[u]=(dp[u-]+ans)%mod;/* 30 与 29增加多少呢,因为30可以分解为2*3*5三个质因数所以增加3个*/
sum[u]=(sum[u-]+dp[u])%mod;
}
int a,b;
while (~scanf ("%d %d",&a,&b)) {
printf ("%d\n",(sum[b]-sum[a-]+mod)%mod);
}
return ;
}
数学真是有意思。。。脑子不够用。。。。。。
xdoj-1022-A simple math problem 2 // 太强了的更多相关文章
- FZYZ-2071 A Simple Math Problem IX
P2071 -- A Simple Math Problem IX 时间限制:1000MS 内存限制:262144KB 状态:Accepted 标签: 数学问题-博弈论 ...
- hdu 1757 A Simple Math Problem (乘法矩阵)
A Simple Math Problem Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Ot ...
- HDU1757 A Simple Math Problem 矩阵快速幂
A Simple Math Problem Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Ot ...
- hdu------(1757)A Simple Math Problem(简单矩阵快速幂)
A Simple Math Problem Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Ot ...
- A Simple Math Problem(矩阵快速幂)(寒假闭关第一题,有点曲折啊)
A Simple Math Problem Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- HDU 1757 A Simple Math Problem (矩阵快速幂)
题目 A Simple Math Problem 解析 矩阵快速幂模板题 构造矩阵 \[\begin{bmatrix}a_0&a_1&a_2&a_3&a_4&a ...
- HDU 1757 A Simple Math Problem(矩阵)
A Simple Math Problem [题目链接]A Simple Math Problem [题目类型]矩阵快速幂 &题解: 这是一个模板题,也算是入门了吧. 推荐一个博客:点这里 跟 ...
- HDU 1757 A Simple Math Problem (矩阵乘法)
A Simple Math Problem Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Ot ...
- hdu 5974 A Simple Math Problem
A Simple Math Problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Ot ...
随机推荐
- shell 数值运算
declare数值运算 linux默认变量类型为字符串 declare [+/-] [选项] 变量名 '-' 给变量设定类型属性 '+' 取消变量的类型属性 '-a' 将变量声明为数组型 '-i' 将 ...
- lubuntu16.04 安装过程以及ssd测试模型的环境配置
1.系统启动盘(ultraISO)制作启动盘, 1/5 文件->打开,打开我们的iso镜像 2/5 选择我们的u盘, 3/5 点击启动->写入硬盘映像 4/5 写入方式选择raw,格式化然 ...
- js 敏感词过滤
<!doctype html> <html> <head> <meta charset="utf-8"> <meta name ...
- WPF实现DoEvents
WPF实现DoEvents 原创 2011年06月30日 12:23:00 标签: wpf / object 2550 static void DoEvents() { DispatcherFrame ...
- Cracking The Coding Interview 9.1
//原文: // // You are given two sorted arrays, A and B, and A has a large enough buffer at the end to ...
- SQL-24 获取所有非manager员工当前的薪水情况,给出dept_no、emp_no以及salary ,当前表示to_date='9999-01-01'
题目描述 获取所有非manager员工当前的薪水情况,给出dept_no.emp_no以及salary ,当前表示to_date='9999-01-01'CREATE TABLE `dept_emp` ...
- 玩转X-CTR100 l STM32F4 l FPU单精度浮点性能测试
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器如何开启ST ...
- Linux文件系统命令 ls
名称:ls 功能:查看文件列表 renjg@renjg-HP-Compaq-Pro--MT:~$ ls add-on.yaml Desktop examples.desktop meta-gnome3 ...
- redis 五大数据类型之list篇
1.lpush/lpop/rpop/rpush/lrange 这里的list就是链表,lpush就是从左往右插入数据,rpush就是从右往左插数据,lrange就是从左往右范围性的取值,pop就是弹 ...
- linux 基本命令大全
系统信息 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 - (SMBIOS ...