Uva10892 LCM Cardinality

来源:互联网 发布:wamp更换sql版本 编辑:程序博客网 时间:2024/05/06 05:21

基础的数论题:对n进行因式分解,因为两个数一定是这两个数的LCM的因数。根据公式a*b = lcm(a,b)*gcd(a,b) 判断a,b是否为所求。

#include <iostream>#include <cstdio>#include <cstring>#include <vector>using namespace std;int gcd(int a,int b){return b == 0 ? a : gcd(b,a%b);}int main(){int n;vector<int> a;while(~scanf("%d",&n) && n){int ans = 0;a.clear();for(int i = 1; i*i <= n; i++){if(n%i==0){if(i*i==n){a.push_back(i);}else{a.push_back(i);a.push_back(n/i);}}}for(int i = 0; i < a.size(); i++){for(int j = i; j < a.size(); j++){if(a[i]*a[j] == n*gcd(a[i],a[j])){ans++;}}}//cout<<a.size()<<endl;cout<<n<<" "<<ans<<endl;}return 0;}


原创粉丝点击