1. 程式人生 > >LightOJ1236->算術基本定理

LightOJ1236->算術基本定理

算術基本定理的應用

題意:找出對於整數對(i,j),他們的lcm為n,這樣的整數對有多少。

思路:比如24=2^3*3^1: (1)如果一個數完整地包含了3^1但是沒有完整地包含2^3(一個數x完整地包含某個質因數p及其出現的次數t,指x可以被p^t整除),比如3,6,12,那麼另一個數必須完整地包含2^3,比如8,24。那麼此時有六種組合(3,8),(3,24),(6,8),(6,24),(12,8),(12,24) (2)若一個數完整地包含2^3但是沒有完整地包含3^1,比如8,那麼另一個數必須完整地包含3^1,比如3,6,12,24,此時有4個。 (3)若一個數完整地包含了2^3和3^1,比如24,那麼另一個數有(3+1)*(1+1)種可能,即1,2,3,4,6,8,12,24。
(4)若一個數既沒有完整的包含2^3也沒有完整地包含3^1,比如1,2,4,那麼另一個數必須為24,此時有3種。 到此為止,你發現除了(24,24)這種組合只在(3)中出現一次,其他情況均出現2次。若上面的總數為t,那麼答案為(t+1)/2。

假設lcm(X,Y)=M,分別分解X,Y,M

X=x1^a1*x2^a2...

Y=x1^b1*x2^b2..
M=x1^c1*x2^c2..
因為是公倍數 所以質因數肯定要相同
那麼max(a1,b1)=c1...max(a2,b2)=c2。 當b1=c1的時候a1的取法是(c1+1)種,a1=c1是b1取法也是(c1+1)種,但是有兩個(c1,c1),所有對於每一個c1來說總的取法是(2*c1+1). 因為要求i<=j,所以最後結果去重一下,但是(n,n)只有一次,那麼解就是(ans+1)/2。
#include <stdio.h>
#include <iostream>
#include <string.h>
using namespace std ;
#define MAX 10000100
bool visit[MAX] ;
long long prime[MAX / 10] ;
int tot = 0 ;

void doprime()//素數篩
{
    for(long long i = 2 ; i < MAX ; i ++)
    {
        if(! visit[i])
        {
            prime[tot ++] = i ;
            for(long long j = i * i ; j < MAX ; j += i) visit[j] = true ;
        }
    }
}
int p[1000] ;//素因子
int a[1000] ;//素因子個數
int cnt ;
void sbreak(long long n)//素因子分解
{
    memset(p , 0 , sizeof(p)) ;
    memset(a , 0 , sizeof(a)) ;
    cnt = 0 ;
    for(int i = 0 ;prime[i] * prime[i] <= n ; i ++)
    {
        if(n % prime[i] == 0)
        {
            p[cnt] = prime[i] ;
            while(n % prime[i] == 0)
            {
                a[cnt] ++ ;
                n /= prime[i] ;
            }
            cnt ++ ;
        }
    }
    if(n != 1)
    {
        p[cnt] = n ;
        a[cnt ++ ] = 1 ;
    }
}
int main()
{
    int T ;
    long long num ;
    doprime() ;
    cin >> T ;
    for(int cas = 1 ; cas <= T ; cas ++)
    {
        cin >> num ;
        sbreak(num) ;
        long long ans = 1 ;
        for(int i = 0 ; i < cnt ; i ++)
            ans = ans * (a[i] * 2 + 1) ;
        ans = (ans + 1) / 2 ;
        printf("Case %d: %lld\n",cas,ans);
    }
    return 0;
}



相關推薦

LightOJ1236->算術基本定理

算術基本定理的應用 題意:找出對於整數對(i,j),他們的lcm為n,這樣的整數對有多少。 思路:比如24=2^3*3^1: (1)如果一個數完整地包含了3^1但是沒有完整地包含2^3(一個數x

51nod 1189 算術基本定理/組合數學

its .html name 整數 names log tar nan i+1 www.51nod.com/onlineJudge/questionCode.html#!problemId=1189 1189 階乘分數 題目來源: Spoj 基準時間限制:1 秒 空間限制:

LightOJ 1341(Aladdin and the Flying Carpet )算術基本定理

star rect out post number text ask OS 約數 It‘s said that Aladdin had to solve seven mysteries before getting the Magical Lamp which summon

算術基本定理

mes png prim 正整數 IV ima inf AS 質數 (1)一個大於1的正整數N,如果它的標準分解式為: ,那麽它的正因數個數為 代碼實現: LL cnt = 0; for(int i=0; i < ans

數論-算術基本定理

lan com orm lba 表示 initial namespace all 整數   算術基本定理又叫唯一因子分解定理,算術基本定理的表述如下: 任何一個大於1的自然數 N,如果N不為質數,那麽N可以唯一分解成有限個質數的乘積 ,這裏P1<P2<P3.

算術基本定理(維基百科)

算術基本定理,又稱為正整數的唯一分解定理,即:每個大於1的自然數,若不是本身就是質數,就是可寫為2個以上的質數的積,而且這些質因子按大小排列之後,寫法僅有一種方式。例如:{\displaystyle 6936=2^{3}\times 3\times 17^{2}},{\displaystyle 12

LightOJ-1336-Sigma Function (算術基本定理

原題連結: Sigma function is an interesting function in Number Theory. It is denoted by the Greek letter Sigma (σ). This function actually denotes th

LightOJ-1236- Pairs Forming LCM (算術基本定理

原題連結: Find the result of the following code: long long pairsFormLCM( int n ) { long long res = 0; for( int i = 1; i <= n; i++ ) for( int j

算術基本定理解析及其應用

1 #include <cstdio> 2 #include <cstring> 3 #include <cmath> 4 typedef long long ll; 5 const ll maxn = 1e6 +7; 6 bool isp[maxn]; 7

hdu4479 (數學題)(算術基本定理

題目大意 給定一個三元組\((x,y,z)\)的\(gcd\)和\(lcm\),求可能的三元組的數量是多少,其中三元組是的具有順序的 其中\(gcd\)和\(lcm\)都是32位整數範圍之內 由算術基本定理可以得知: 如果$k=gcd(m,n) \(則\) k_p=min(m_p,n_p)$ 如果\(

算術基本定理“質數分解唯一性的證明”:古典方法與現代方法

算術基本定理的最早證明是由歐幾里得給出的。 每一個比1大的自然數N只能有一種方式分解成質數的乘積。 推論:若一個質數p是乘積ab的因子,則p不是a的因子就是b的因子。 大於1的自然數必可寫成質數之積 用反證法:假設存在大於1的自然數不能寫成質數的乘積,把最小的那個稱為n。

算術基本定理(唯一分解定理

                                           算術基本定理 算術基本定理: 每個大於1的正整數N都可以表示成素數之積的形式 :  N=p1^a1*p2^a2*p3^a3...(pi代表素數,ai代表指數) d(n)是n的正因子

定理算術基本定理(唯一分解定理

大蒟蒻來水貼了! 算術基本定理(唯一分解定理) 一句話:      任何大於1的自然數,都可以唯一分解成有限個質數的乘積 例如對於大於1的自然數n, 這裡Pi均為質數,其指數ai是正

LightOJ 1341 Aladdin and the Flying Carpet(算術基本定理

LightOJ 1341 Aladdin and the Flying Carpet 題意: 輸入一個矩形面積,以及矩形邊長的最小值,已知矩形不是正方形,求有多少種邊長組合。 思路

【ACM-ICPC 2018 南京賽區網路預賽】 J. Sum 【算術基本定理 + 離線分段打表】

分析:首先我們要用算術基本來找出求f(x)的規律,找到之後,我們只要求出字首和就行了,這裡可以用離線分段打表巧求,QAQ。 程式碼 #include <map> #include <set> #include <qu

算術基本定理------比1大的整數N的素因子分解是唯一的

算術基本定理:每一個比1大的整數N只能有一種方式分解成素數的乘積。(不考慮因子的次序) 這個命題初看起來似乎是很明顯的,但它決不是不證自明的。本篇博文給出兩種證明方法。 證明一:反證

算術基本定理(唯一分解定理 -- 分解素因子)

算術基本定理:任何大於1的自然數,都可以唯一分解成有限個質數的乘積:FZU - 1075 這是一道裸題,程式碼可行性不考,反正網上大佬都是這麼敲的。。程式碼實現分解素因子:#include<ios

算術基本定理及應用串講尤拉函式

主要有以下內容: 1. 質因子分解 2. 質因子個數 3. 求數N的所有因子之和 4. 算術基本定理角度看GCD和LCM 程式碼實現: 質因數分解,個數統計,求和 #include <cstdio> #include &l

LightOJ 1236 Pairs Forming LCM(算術基本定理

LightOJ 1236 Pairs Forming LCM 題意: long long pairsFormLCM( int n ) { long long res = 0;

uva 10791 Minimum Sum LCM(算術基本定理

大意:給出一個數字n,LCM(q1,q2,……,qk)=n,求解q1,a2……qk的最小和。 分析:剛開始讀錯題了(又讀錯T_T),是一系列的數字之和。 由算術基本定理,,同時,發現如果,是最小的,也就是說如果是由產生的,那麼積是最小的,同時是一定的。比如,得到: 那麼和