HPUOJ_1443_完美三元组

来源:互联网 发布:淘宝网牛仔女裤 编辑:程序博客网 时间:2024/05/29 04:22


1443: 完美三元组

时间限制: 1 Sec 内存限制: 128 MB

提交: 50 解决: 3 统计

题目描述

第**届ACM亚洲区域赛HeNan赛区正在HPU举行,这时作为HPUACM的萌新王小二要拉着朋友到现场为学姐们加油!

然而,入场竟然有个鉴定程序,判断你是否接触过ACM,通过此问题你才有机会进场当观众。问题描述如下:

定义完美三元组(a, b, d)需满足一下三个条件:

  •  a % d = 0, 记作:d | a;                                              
  •  b % d = 0, 记作:d | b;                                              
  •  a >= b >= d >= 1 ;                                                     

输入

T组测试数据,第一行一个T(1<=T<=10000),之后T行每行两个整数L,R,表示三元组中a的取值区间[L, R].

求a在此区间下(b,d满足上述条件)完美三元组总数(1<=L<=R<=100000).

输出

每行输出一个整数,代表完美三元组个数;

样例输入

22 31 3

样例输出

78

提示

第一个样例:L = 2, R = 3,表示a取值区间[2, 3],此时:

a = 2时,完美三元组:(2, 1, 1), (2, 2, 1), (2, 2, 2);

a = 3时,完美三元组:(3, 1, 1), (3, 2, 1), (3, 3, 1), (3, 3, 3);



好难啊,完全没搞出来规律,唉,智商真是硬伤。

看完答案后自己写了一些个人理解,如图,好久没写过字了。。。 >.< (好丑啊)



#include <iostream>#include <stdio.h>#include <iostream>#include <math.h>#include <string.h>using namespace std;typedef long long ll;ll a[100005];void init(){for(int i=1;i<=100000;i++){ll ans=0;for(int j=1;j<=sqrt(i);j++){if(i%j==0){ans+=j+i/j;if(i==j*j)ans-=j;}}a[i]=a[i-1]+ans;}}int main()  {init();int t;scanf("%d",&t);while(t--){int l,r;scanf("%d%d",&l,&r);printf("%lld\n",a[r]-a[l-1]);}return 0;}


原创粉丝点击