uva 11542 Square(數學 高斯消元)

2021-06-27 03:06:11 字數 1205 閱讀 2192

給出n個數,問你有多少種取數的方法使得取出數的乘積是乙個完全平方數

這個題的思維跨度還是很大的

因為題目中提示每個數的素因子不會大於500

考慮從唯一分解式著手

把這n個數寫成唯一分解式的形式

求出對應素因子的指數

比如4 6 10 15

即為:4 = 2^2

6 = 2^1×3^1

10 = 2^1×5^1

15 = 3^1×5^1

所以四個數對應的質數因子最大為5

得到4個向量為:

x1 = (2, 0, 0)

x2 = (1, 1, 0)

x3 = (1, 0, 1)

x4 = (0, 1, 1)

這四個數的乘積可以寫為

2^(x1+x2+x3)×3^(x2+x4)×5^(x3+x4)

要使結果為完全平方數,就要每個素數的指數和均為偶數

所以有(x2+x3) % 2 = 0 (x1%2 == 0)

(x2+x4) % 2 = 0

(x3+x4) % 2 = 0

可化為:(這裡^表示異或,上面的^表示取冪)

x2 ^ x3 = 0

x2 ^ x4 = 0

x3 ^ x4 = 0

化作對應的增廣矩陣則為:

接下來按照高斯消元法解矩陣即可

有x個自由變數

則對應結果為1<

**如下:

#include #include #include #include #define maxn 510

#define ll long long

using namespace std;

typedef int matrix[maxn][maxn];

int prime[maxn];

int gen_primes(int n) {

int cnt = 2;

prime[0] = 2;

prime[1] = 3;

for(int i=4; i<=500; ++i) {

bool ok = true;

for(int j=0; j> x;

for(int j=0; j

uva11542 高斯消元

題意 給定一些數字,保證這些數字質因子不會超過500,求這些數字中選出幾個,乘積為完全平方數,問有幾種選法 思路 對每個數字分解成質因子後,發現如果要是完全平方數,選出來的數字的每個質因子個數都必然要是偶數,這樣每個質因子可以列出乙個異或的方程,如果數字包含質因子,就是有這個未知數,然後進行高斯消元...

uva 11542 異或方程組

include include include include include includeusing namespace std const int maxn 500 10 const int maxp 100 int vis maxn int prime maxp int gen primes...

第三十五題 UVA201 正方形 Squares

pdf 題目描述 乙個兒童棋盤遊戲,包含了由點組成的正方形矩陣,由線段連線了一些相鄰的點。遊戲的乙個環節是,要求玩家數出由這些線段所形成的特定大小的正方形有多少個。例如,按下圖所示,有 3 個正方形,其中大小為 1 的有 2 個,大小為 2 的有 1 個。正方形的 大小 是指構成它的一條邊的線段數。...