链接:点击打开链接
题意:
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