NYOJ520 最大素因子
很巧妙的一道题。我是没能想到这么巧的方法,唉,差距真不是那么一点点啊...
附原题标程:
#include<stdio.h> #define N 1000010 int ans[N]={0},a; void prime() { int i,j,x=0; for( i=2; i<N; i++) if( ans[i] == 0 ) { x++; for(j=i; j<N; j+=i) //素数的整倍数的最大素因子可能是该素数 ans[j] = x; //更新素数对应的出现的次序 } } main() { prime(); while( scanf ( "%d" , &a ) != EOF ) printf ( "%d\n", ans[a] ); }
我模仿着写的一个
#include <cstdio> #define MAX 1000000 + 2 int a[MAX]; void Count(){ for(int i = 2, count = 0; i < MAX; ++i){ if(!a[i]){ ++count; for(int j = i; j < MAX; j += i) a[j] = count; //该素数的倍数的最大素因子可能是这个值,如果不是,以后可更新 } } } int main(){ int n; Count(); while(scanf("%d", &n) == 1) printf("%d\n", a[n]); return 0; }