zoukankan      html  css  js  c++  java
  • CodeForces 588B

    题意:在n的因子中找出一个最大的因子,这个因子的因子中不能出现平方数

    题解:在O(sqrt(n))找出因子a,由于任何大于1的数可以写成素数的形式,所以只要枚举小余sqrt(a)的素数平方是否为a的因子。

    #include <iostream>
    #include <cstring>
    #include <cmath>
    
    using namespace std;
    
    long long p[80000];
    bool vis[1000000];
    
    void prim(int n)
    {
        int m=sqrt(n+0.5);
        memset(vis,0,sizeof(vis));
        for(int i=2;i<=m;i++) if(!vis[i])
            for(int j=i*i;j<=n;j+=i) vis[j]=1;
        int ans=0; 
        for(int i=2;i<=n;i++) 
            if(!vis[i]) p[ans++]=i;
        // for(int i=0;i<ans;i++)
        //     cout<<p[i]<<endl;
        // cout<<ans<<endl;78499
    }
    
    int solve(long long n)
    {
        long long temp=sqrt(n+0.5);
        bool ok=1;
        for(long long i=0;p[i]<=temp;i++)
        {
            //cout<<n<<' '<<p[i]<<endl;
            long long p2=p[i]*p[i];
            if(n%p2==0)
            {
                ok=0;
                break;
            }
        }
        if(ok) return 1;
        return 0;
    }
    
    int main()
    {
        prim(1000001);
        long long n;
        cin>>n;
        long long temp=sqrt(n+0.5);
        long long so=1;
        for(long long i=1;i<=temp;i++)
        {
            if(n%i==0)
            {
                if(solve(n/i) && n/i>so)
                    so=n/i;
                if(solve(i) && i>so)
                    so=i;
            }
        }
        cout<<so<<endl;
        return 0;
    }
  • 相关阅读:
    web--webstorm的一些常用快捷键
    studio--常见设置
    并发之lock的condition接口
    并发之atomic实例
    并发之volatile底层原理
    并发之java.util.concurrent.atomic原子操作类包
    多线程之整体概括
    Sqlite之事务
    activity--生命周期总结
    网络之TCP握手总结
  • 原文地址:https://www.cnblogs.com/mgxj/p/5525905.html
Copyright © 2011-2022 走看看