zoj 1284 || poj 1528 Perfection

    技术2025-09-22  83

     

    看着是打表题。开始写的打表的算法有点慢,跑1秒多才出来答案,就想把表直接列出来,结果超过提交限制了 = =。。

     

    后来想起来筛法了,好多数论题都用类似筛法的方法了。把所有数都赋值为1,从2开始,2的倍数+=2.。。3的倍数+=3.。。

     

    WA了一次,1的话应该是不算自身的,所以加和为0。。

     

    #include <cstdio> #include <cstdlib> #include <iostream> #include <string.h> #include <queue> #include <math.h> #include <limits.h> #define MAX 60010 using namespace std; int out[MAX]; void init() { int i,j; for(i=1; i<MAX; i++) out[i] = 1; out[1] = 0; for(i=2; i<MAX; i++) { for(j=2; j*i<MAX; j++) out[j*i] += i; } } int main() { int n; init(); printf("PERFECTION OUTPUT/n"); while( ~scanf("%d",&n) && n ) { printf("%5d",n); if( out[n] == n ) printf(" PERFECT/n"); else if( out[n] > n ) printf(" ABUNDANT/n"); else printf(" DEFICIENT/n"); } printf("END OF OUTPUT"); return 0; }  

    最新回复(0)