CUIT-ACM 01-14 G

G - Largest prime factor HDU - 2136
题目大意:
将所有0 < n < 1000000的数从小到大排序,所有质数的序号不断递增,如:2→1,3→2,5→3,7→4……,所有合数取最小的约数的序号,如4→1,6→1,8→1,9→2……规定1→0
INPUT
0 < n < 1000000的数
0 < n < 1000000的数
……
OUTPUT
对应的序号
对应的序号
……
思路:
先将所有0 ~1000000的数全部排序,然后输入后,再找到与之对应的数输出即可。
排序方法:
①先初始化所有0 < n < 1000000的数,规定序数都为0
②将2及其所有2的倍数都标记为1,将3及其所有3的倍数都标记为2,将5及其所有5的倍数都标记为5……
注意:所有标记不为0的数(已经标记的数)都不再标记(直接跳过)

CUIT-ACM 01-14 G_第1张图片

代码:

#include
int a[1000000],i,j,n,k=1;
int main()
{
    for(i=2;i<1000000;i++)
    {
        if(a[i]==0)
        {
            for(j=i;j<1000000;j+=i)
            {
                a[j]=k;
            }
            k++;
        }
    }
    while(~scanf("%d",&n))
    {
        printf("%d\n",a[n]);
    }
    return 0;
}

注意:
Ⅰ.建立一个数组即可,数组[ ]的数字即为对应的自然数
Ⅱ.注意判断是否已经被标记过(判断标记是否为0)

你可能感兴趣的:(CUIT-ACM 01-14 G)