链接:点击打开链接
题意:
1 100 1 1000
0 1
oj数据有点大,常规方法,一个劲的超时,看了一下排在前几名的人的代码,基本都是打表过,(囧~~),后来有点提示,用数组模拟过了,其实还可以用容器
,那样写的话看的比较舒服。
代码:(红色区域重点)
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <algorithm>
using namespace std;
#define N 5000001
#define CLR(arr, what) memset(arr, what, sizeof(arr))
int a[N] ,pre[N],last[N],ss=0;
void getsum();
int main()
{
//getsum();
// for(int i = 2; i <= N; i++) a[i] = 1;
// for(int i = 2; i * i <= N; i++)
// for (int j = i; j * i <= N; j++)
// a[i * j] += i + j;
<span style="color:#ff0000;"> for(int i = 2; i <= N; i++) a[i] = 1;
for(int i = 2; i * i <= N; i++)
for(int j = i + 1; i * j <= N; j++)
a[i * j] += i + j;
for(int i = 2; i * i <= N; i++)
a[i * i] += i;
for(int i=1; i<=N; i++)
{
int t=a[i];
if (t > i && t <=N&& a[t] == i)
{
pre[ss]=i;
last[ss]=t;
ss++;
}
}</span>
int m,i,j,n;
while(~scanf("%d%d",&m,&n))
{
int count = 0;
for(i=0; i<ss; i++)
if(pre[i]>=m&&last[i]<=n)
count++;
printf("%d\n",count);
}
return 0;
}
NYOJ 411 Friends number (数论--因子和)
原文地址:http://blog.csdn.net/u013050857/article/details/44197555