zoukankan      html  css  js  c++  java
  • HDU2136 Largest prime factor 素数筛

    这道题目考察的是素数筛,需要将素数筛选出来。

    需要注意的是,此题得要求是找出素数位置,因此需要另开一个数组,将素数位置

    挨个保存下来。

    有个优化的地方,对于本身是素数的数字直接输出位置就可以了。

    但对于本身是合数的数字,由于需要找出其最大的质数因子的位置,为此可以在进行筛选素数的时候对于某个素数的

    倍数都将其变为这个素数的位置(因为这个素数是这个合数目前来说的最大因子),而对于以后的素数进行筛选时,

    可以将一些之前已经赋值过的合数再次更新。

    例:对于6:2先更新,此时6的最大质因子为2,位置为1,

          素数3更新,此时3为6的最大质因子,位置为2.

    由此,得出以下代码:

     1 #include <iostream>
     2 using namespace std;
     3 const int MAXN = 1000010;
     4 int a[MAXN];
     5 void Prime_Shieve(){
     6     int cnt = 0;
     7     for(int i = 2; i <= MAXN; i ++){
     8         if(!a[i]){
     9             a[i] = ++cnt;
    10             for(int j = 2 * i; j <= MAXN; j += i)
    11                 a[j] = cnt;
    12         }  
    13     }
    14 }
    15 int main(){
    16     Prime_Shieve();
    17     int n;
    18     while(scanf("%d",&n) != EOF){
    19         printf("%d
    ", a[n]);
    20     }21     return 0;
    22 }
  • 相关阅读:
    netty(七)buffer源码学习2
    netty(六) buffer 源码分析
    netty(五) channel
    netty(三)---NioEventLoop分析
    netty(二)---客户端连接
    netty(一)---服务端源码阅读
    java NIO
    零拷贝
    计算机操作系统(复习)--- 虚拟内存
    疫情环境下的网络学习笔记 python 3.16
  • 原文地址:https://www.cnblogs.com/pureayu/p/12745407.html
Copyright © 2011-2022 走看看