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 }
  • 相关阅读:
    插入排序java代码
    选择排序java代码
    break语句的作用
    while和do-while的区别
    if-else-if-else与switch的区别
    Java中基本类型的转换规则
    如何让计算机最高效的算出2乘以8?
    |和||的作用和区别
    &和&&的作用和区别
    i++和++i的作用和区别
  • 原文地址:https://www.cnblogs.com/pureayu/p/12745407.html
Copyright © 2011-2022 走看看