zoukankan      html  css  js  c++  java
  • light1236 素数打表,质因数分解

    不知道为什么会错

    /*
    求出 lcm(i,j)==n 的对数,
    分解质因数,p1^e1 * p2^e2 * p3^e3 那么 i,j中必定有一个数有e1个p1因子,另一个任意即可 
    那么最终的结果就是 
    */
    #include<bits/stdc++.h>
    using namespace std;
    #define maxn 10000005
    #define ll long long
    ll n;
    
    int v[maxn];
    int prime[maxn],m;
    void init(){
        memset(v,0,sizeof v);
        memset(prime,0,sizeof prime);
        m=0;
        for(int i=2;i<maxn;i++){
            if(v[i]==0){
                v[i]=i;
                prime[++m]=i;
            }
            for(int j=1;j<=m;j++){
                if(prime[j]>v[i] || prime[j]*i>n) break;
                v[i*prime[j]]=prime[j];
            }
        }
    }
    int p[maxn],c[maxn],mm;
    void divide(ll n){
        memset(p,0,sizeof p);
        memset(c,0,sizeof c);
        mm=0;
        for(int i=1;i<=m;i++){
            if(prime[i]>n)break;
            if(n%prime[i]==0){
                p[++mm]=prime[i],c[mm]=0;
                while(n%prime[i]==0)n/=prime[i],c[mm]++;
            }
        }
        if(n>1)p[++mm]=n,c[mm]=1;
    }
    
    
    int main(){
        init();
        int T;
        cin>>T;
        for(int tt=1;tt<=T;tt++){
            cin>>n;
            divide(n);
            ll res=1;
            for(int i=1;i<=mm;i++)
                res*=(ll)(2*c[i]+1);
            printf("Case %d: %lld
    ",tt,res+1>>1);
        }
        
    
    
    }

    这是网上的ac代码

    #include <iostream>
    #include <cstdio>
    #include <map>
    #include <cmath>
    #include <map>
    #include <vector>
    #include <algorithm>
    #include <cstring>
    #include <string>
    using namespace std;
    #define LL long long
    #define maxn 10000001
    bool v[maxn];
    vector<int>prime;
    void p(){
        memset(v,false,sizeof(v));
        for(int i=2;i<=maxn;i++){
            if(v[i])continue;
            for(int j=i+i;j<=maxn;j+=i){
                v[j]=true;
            }
            if(!v[i]) prime.push_back(i);
        }
    }
    int main()
    {
        int t,ca=1;
        LL n,ans;
        p();
        scanf("%d",&t);
        while(t--){
            ans=1;
            scanf("%lld",&n);
            for(int i=0;i<prime.size()&&n>1;i++){
                if(n%prime[i]==0){
                    LL s=0;
                    while(n%prime[i]==0){
                        s++;
                        n/=prime[i];
                    }
                    ans*=(s*2+1);
                }
            }
            if(n>1){
                ans*=3;
            }
            printf("Case %d: %lld
    ",ca++,(ans+1)/2);
        }
        return 0;
    }
  • 相关阅读:
    簡單的內容移動展示
    PHPExcel讀取excel數據
    javascript touch事件
    vue学习笔记之初识vue——模板声明与绑定
    vue学习笔记初识vue——使用HTML模板
    vue学习笔记初识vue——创建vue示例
    vue学习笔记之初识vue——渐进式前端框架
    vue整屏滑动组件
    CSS如何居中div??
    vue+百度地图API
  • 原文地址:https://www.cnblogs.com/zsben991126/p/10403748.html
Copyright © 2011-2022 走看看