zoukankan      html  css  js  c++  java
  • POJ 2407 素数筛

    Description

    Given n, a positive integer, how many positive integers less than n are relatively prime to n? Two integers a and b are relatively prime if there are no integers x > 1, y > 0, z > 0 such that a = xy and b = xz.

    Input

    There are several test cases. For each test case, standard input contains a line with n <= 1,000,000,000. A line containing 0 follows the last case.

    Output

    For each test case there should be single line of output answering the question posed above.

    Sample Input

    7
    12
    0
    

    Sample Output

    6
    4
    素数筛水题,本题我用的是一种据说挺厉害的素数筛,特写个博客记录下来,下附ac代码:
    #include<iostream>
    #include<cmath>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    int pri[400100];
    int p[400000];
    void prime()
    {
        memset(pri,0,sizeof(pri));
        pri[0]=pri[1]=1;
        int num=0,i,j;
        for(i = 2; i < 400100; ++i)
        {
            if(!(pri[i])) p[num++] = i;
            for(j = 0; (j<num && i*p[j]<400100); ++j)
            {
                pri[i*p[j]] = 1;
                if(!(i%p[j])) break;
            }
        }
    }
    int power(int x,int y)
    {
        int mi=1;
        for(int i=1;i<=y;i++)
        {
            mi*=x;
        }
        return mi-mi/x;
    }
    int main()
    {
        int n;
        prime();
        while(scanf("%d",&n),n)
        {
            int temp=n,sum=1,ok=0;
            for(int i=0;i<400000;i++)
            {
                if(temp%p[i]==0)
                {
                    int tot=0;
                    while(temp%p[i]==0)
                    {
                        tot++;
                        temp/=p[i];
                    }
                    sum*=power(p[i],tot);
                }
                else if(sum==0&&p[i]>=(int)(sqrt(n)+1))
                {
                    printf("%d
    ",n-1);
                    break;
                }
                else if(temp==1)
                {
                    ok=1;break;
                }
            }
            if(ok)printf("%d
    ",sum);
        }
        return 0;
    }
  • 相关阅读:
    10_树基础部分
    11_多线程
    14_JUC
    Servlet代码实例
    关于JSP引用资源路径
    Struts2代码实例
    hadoop三大核心组件介绍
    presto自定义函数开发
    git使用
    hive优化总结
  • 原文地址:https://www.cnblogs.com/lthb/p/4375021.html
Copyright © 2011-2022 走看看