題意:
給定一些數字,保證這些數字質因子不會超過500,求這些數字中選出幾個,乘積為完全平方數,問有幾種選法
思路:對每個數字分解成質因子後,發現如果要是完全平方數,選出來的數字的每個質因子個數都必然要是偶數,這樣每個質因子可以列出乙個異或的方程,如果數字包含質因子,就是有這個未知數,然後進行高斯消元,求出自由變數的個數,每個自由變數可以選或不選,這樣的情況就是(2^個數),然後在扣掉什麼都不選的1種就是答案了
#include #include #include #define ll long long
using namespace std;
const ll n = 510;
int t, n, a[n][n], max, vis[n], pn = 0;
ll prime[n];
void get_prime()
}int gauss()
}i++;
} j++;
} return n - i;
}int main()
}} printf("%lld\n", (1ll << (gauss())) - 1);
} return 0;
}
uva 11542 Square(數學 高斯消元)
給出n個數,問你有多少種取數的方法使得取出數的乘積是乙個完全平方數 這個題的思維跨度還是很大的 因為題目中提示每個數的素因子不會大於500 考慮從唯一分解式著手 把這n個數寫成唯一分解式的形式 求出對應素因子的指數 比如4 6 10 15 即為 4 2 2 6 2 1 3 1 10 2 1 5 1 ...
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...
高斯消元 浮點高斯消元
浮點數高斯消元 問題描述 給出乙個線性方程組,有n個方程組,m個未知數。解這個線性方程組。輸入格式 第1行 2個整數n和m,n,m 400,且n不一定等於m 接下來n行,每行m 1個整數,表示乙個方程的m個未知數的係數和常數 輸出格式 如果無解,輸出 no solution 如果有唯一解,輸出m行,...