1. 程式人生 > >算數基本定理(求一個數所有約數的個數)——一道OJ題目

算數基本定理(求一個數所有約數的個數)——一道OJ題目

#include <cstdio>
#include <iostream>
#include <map>
#include <set>
using namespace std;
int min(int a,int b)
{
	if(a>b)
		return b;
	return a;
}
int main()
{
	map<int,int> fa,fb;
	set<int> h;
	int a,b,count,ct;
	freopen("f:/in.txt","r",stdin);
	while(~scanf("%d%d",&a,&b))
	{
		fa.clear();
		fb.clear();
		h.clear();

		//分解a
		for(int i=2;i*i<=a;i++)
		{
			if(a%i==0)
			{
				h.insert(i);//存放質數因子
				//求該質數因子的個數,存入map
				while(a%i==0)
				{
					fa[i]++;
					a/=i;
				}
			}
		}
		if(a>1) 
		{
			fa[a]++;//最後一個質數因子
			h.insert(a);
		}

		//分解b
		for(int j=2;j*j<=b;j++)
		{
			while(b%j==0) //求該質數因子個數
			{
				fb[j]++;    
				b/=j;
			}
		}
		if(b>1)    
			fb[b]++;//最後一個質數因子

		count=0;
		set<int>::iterator it;
		count=1;
		for(it=h.begin();it!=h.end();it++)
		{
			//若有n個相同的m質數因子,則有n+1種組合方式(0個m、1個m.....n個m),每一張組合與其後的其他質數因子的組合之一都形成一個約數
			ct=min(fa[*it],fb[*it])+1;  
			count*=ct;
		}

		printf("%d\n",count); // 1本身也是公約數
	}
	fclose(stdin);
	return 0;
}



相關推薦

算數基本定理個數所有約數個數——一道OJ題目

#include <cstdio> #include <iostream> #include <map> #include <set> using namespace std; int min(int a,int b) { if(a>b) retur

算數基本定理約數個數

題目:最多約數問題 正整數x 的約數是能整除x的正整數,其約數的個數記為div(x),例如div(10)=4。 設a 和b 是兩個正整數,找出a 和b 之間約數個數最多的數x 的約數個數。 樣例輸入:   1 36 樣例輸出:   9 算數基本定理:又稱

LightOJ 1236 Pairs Forming LCM算數基本定理

i+1 clas while 包含 兩個 min family clu eof 題意:在a,b中(a,b<=n)(1 ≤ n ≤ 1014),有多少組(a,b) (a<b)滿足lcm(a,b)==n; 先來看個知識點: 素因子分解:n = p1 ^ e

Aladdin and the Flying Carpet LightOJ - 1341算數基本定理

題目連結:qaq   題意:找出符合的因子對數的個數   思路:知道算數基本定理後就簡單了(感覺和暴力的複雜度一樣啊QAQ。。難受)   附上程式碼: #include<cstdio> #include<cmath>

算數基本原理唯一分解定理

唯一分解定理: 任意一個大於0的正整數都能被表示成若干個素數的乘積且表示方法是唯一的;整理可以將相同素數的合併 X=p1^a1*p2^a2……pn^an; p1..pn 為素數 數X的因子數

UVA 10791——Minimum Sum LCM 算數基本定理

    題目連結     題目大意 : 給你一個數n,讓你將這個數分解成至少兩個數,對每一個分解式進行求和,算出其中最小的那一個。     為什麼按照算數基本定理算出來的數字就是最小的吶:因為每一個數字都可以運用算數基本定理進行分解,如果所用的因數不是所分解的這些質數,那麼

leetcode解題之69.Sqrt(x) & 367. Valid Perfect Square Java版 個數的平方根

69. Sqrt(x) Implement int sqrt(int x). Compute and return the square root of x. 求一個數的平方根,並向下取整。

LightOJ - 1117 Helping Cicada 1~n有多少個數不能被這m個數中任意一個整除(容斥+狀態壓縮)

vol == show fine cst href main http color 題意:http://www.lightoj.com/volume_showproblem.php?problem=1117 考慮1個數k,1~n有[n/k]個數能被k整除,[a]表示a向下取

算數基本定理約數定理

乘法 size idt post width 大於 spa bsp 其中 算數基本定理 內容 何一個大於1的自然數 N, 如果N不為質數,那麽N可以唯一分解成有限個質數的乘積 ,這裏 均為質數,其中指數ai是正整數,如果N為質數也很顯然 約數定理 內容 由算數基本定理

nefu 118 n!後面有多少個0(算數基本定理

個數 算術 算數 end OS 因式分解 大於 一個數 family 題意:從輸入中讀取一個數n,求出n!中末尾0的個數。 思路:階乘後的數很大,不可能直接計算的,對於任意一個正整數,若對其進行因式分解,那麽其末尾的0必定可以分解為2*5,在這裏,每一個0必然和一個因子5對

SpringMVC----RESTFUL_CRUD_顯示所有員工信息使用組靜態數據

pos mvc 3.5 work info under his app_id .org 1.實體類 package com.yikuan.springmvc.crud.entities; import java.util.Date; import javax.vali

快捷運維——linux基本命令主題

本章節會 收集linux常用命令,希望對後端部署以及問題排查起到一定的作用  1.   netstat  -anp  |grep  8002 (埠號) 要看監控狀態為LISTEN表示已經被佔用,最後一列顯示被服務

算術基本定理維基百科

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

Scrapy1.5基本概念——配置項Settings

本文為譯文,原文見地址:https://docs.scrapy.org/en/latest/topics/settings.html 配置項 Scrapy配置項允許你自定義所有Scrapy元件的行為,包括核心、擴充套件、管道和爬蟲本身。 配置項的基礎結構提供了鍵值對

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

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

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

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

lightOj 1341Aladdin and the Flying Carpet 算數基本定理

It's said that Aladdin had to solve seven mysteries before getting the Magical Lamp which summons a powerful Genie. Here we are concerned about the first

[LightOJ 1341] Aladdin and the Flying Carpet (算數基本定理(唯一分解定理))

題目 fly pro sca rime memset def bool tin 題目鏈接: https://vjudge.net/problem/LightOJ-1341 題目描述: 問有幾種邊長為整數的矩形面積等於a,且矩形的短邊不小於b 算數基本定理的知識點:https

1341(算數基本定理

It's said that Aladdin had to solve seven mysteries before getting the Magical Lamp which summons a powerful Genie. Here we are concerned about the first m

Lucas定理組合數,例題FZU2020,HDU3944

Lucas定理:用於求C(n,m) mod p,其中p為素數 證明等在網上都可以找到,我也不是很懂就略過了(懂了補上)。 直接貼出用法吧: 主要程式碼就兩行,需要用到的知識有快速冪和求逆元(計算組合數),必要的時候需要打表(計算階乘) 核心程式碼:   ll l