标签:style blog http color os io ar for 文件
一、题目
http://acm.hdu.edu.cn/showproblem.php?pid=4497
三、代码
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
using namespace std;
int p[100005];
long long ans;
int n;
long long gcd(int x)
{
//int temp = int (sqrt(x) + 1);[如果按这样写,不按下面的写提交时就会出现“编译错误”!!!]
/*sqrt函数
功 能: 计算一个非负实数的平方根
函数原型: 在VC6.0中的math.h头文件的函数原型为double sqrt(double);*/
int temp=sqrt(x*1.0+0.5);
memset(p,0,sizeof(p));
for(int i = 2; i <= temp; i++)
{
while(x%i == 0)
{
x = x/i;
p[i]++;
}
}
if(x != 1) ans = 6;//如果b/a本身是素数
else ans = 1;
for(int i = 2; i <= temp; i++)
{
if(p[i])
ans *= p[i]*6;
}
return ans;
}
int main()
{
int a,b;
scanf("%d",&n);
while(n--)
{
scanf("%d%d",&a,&b);
if(b%a != 0)
printf("0\n");
else
{
printf("%I64d\n",gcd(b/a));
}
}
return 0;
}
四、训练赛的时候没有做出来,一直想着能不能用辗转相除法求三个数的最大公约数。,之后看了http://blog.csdn.net/tobewhatyouwanttobe/article/details/10285863的博客才明白。
后来,看了别人的思路,自己敲的时候,还是遇到了一些开始没想通的地方,不过,后来都解决了,并且标注到了程序里。
坦白说,这道题我原来做过类似的,当时做的时候就没大明白,后来解决之后,也没有回顾,更没有再练习相似的题,这是个教训,也值得反思!!!!!
校队训练赛,同时也是HDU4497(数论:素数分解+组合数学)
标签:style blog http color os io ar for 文件
原文地址:http://www.cnblogs.com/fightfor/p/3960212.html