HNUST OJ 2286 亲和数

46 篇文章 23 订阅

问题 I: 亲和数
时间限制: 1 Sec  内存限制: 128 MB

题目描述
两个正整数中,彼此的全部约数之和(本身除外)与另一方相等,则称这两数为亲和数。 
例如,220和284就互为亲和数。 

输入
输入不超过1000行数字,每行一个正整数n(1 < n <= 106)。

 输出
输出[1,n]中有亲和数对的数目。 

样例输入
250
300

样例输出
0
1

思路

预处理大概需要1s多一点,如果时限开到2s就可以不用打表

注:打表程序是把原先被注释的代码注释起来。原先没被注释的代码注释了

#include <bits/stdc++.h>

using namespace std;

// 2022 OneWan


// int sum[1000001], ans[1000001];

int main() {
	// freopen("biaozi.txt", "w", stdout);
	// for (int i = 2 ; i <= 1000000 ; ++i) {
		// sum[i] = 1;
		// for (int j = 2 ; j * j <= i; ++j) {
			// if (i % j == 0) {
				// sum[i] += j;
				// int k = i / j;
				// if (j != k) sum[i] += k;
			// }
		// }
	// }
	// for (int i = 2 ; i <= 1000000 ; ++i) {
		// int a = sum[i];
		// if (a >= 1000000) continue;
		// if (i == a) continue;
		// if (i == sum[a]) {
			// ++ans[max(i, a)];
		// }
	// }
	
	// ans[1] = 0;
	// for (int i = 2 ; i <= 1000000 ; ++i) ans[i] += ans[i - 1];
	// int temp = 0;
	// for (int i = 2 ; i <= 1000000 ; ++i) {
		// if (ans[i] != temp) {
			// printf(", %d", i);
		// }
		// temp = ans[i];
	// }
	int a[] = {284, 1210, 2924, 5564, 6368, 10856, 14595, 18416, 66992, 71145, 76084, 87633, 88730, 123152, 124155, 139815, 153176, 168730, 176336, 180848, 202444, 203432, 365084, 389924, 399592, 430402, 455344, 486178, 514736, 525915, 652664, 669688, 686072, 691256, 712216, 783556, 796696, 863835, 901424, 980984};
	int t;
	while (scanf("%d", &t) != EOF) {
		int ans;
		for (ans = 0 ; t >= a[ans] ; ++ans);
		printf("%d\n", ans);
	}
	return 0;
}
 
/**************************************************************
    Problem: 2286
    User: 21XXXXXXXX
    Language: C++
    Result: 正确
    Time:0 ms
    Memory:2024 kb
****************************************************************/
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值