比赛 20110412 评测结果 WWTTTTTTTW
题目名称 双亲数 最终得分 0
用户昵称 Citron酱 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2011-04-12 09:43:53
显示代码纯文本
#include <fstream>
#include <cmath>

#define I_F "parents.in"
#define O_F "parents.out"
#define MAXp 100000

using namespace std;

long a,b,d,p;
long primes[MAXp];
long long ans=1;

void Input();
bool Prime(long);
void GetPrimes();
void Search(long,long,long);
void Output();

int main()
{
	Input();
	GetPrimes();
	Search(1,1,0);
	Output();
	return 0;
}

void Input()
{
	ifstream fin(I_F);
	fin>>a>>b>>d;
	fin.close();
	
	if (a>b)
	{
		int t=a;
		a=b;
		b=t;
	}
}

bool Prime(long x)
{
	for (long i=0, t=sqrt((double)x); (i<p)&&(primes[i]<=t); i++)
		if (x%primes[i]==0)
			return false;
	return true;
}

void GetPrimes()
{
	primes[0]=2,
	p=1;
	for (long i=3; i<=b/2; i+=2)
		if (Prime(i))
			primes[p++]=i;

	a/=d,
	b/=d;
}

void Search(long na, long nb, long n)
{
	if (n<p)
	{
		long temp=na*primes[n];
		while (temp<=a)
			Search(temp,nb,n+1),
			temp*=primes[n];
		temp=nb*primes[n];
		while (temp<=b)
			Search(na,temp,n+1),
			temp*=primes[n];
		Search(na,nb,n+1);
	}
	else
		ans+=(na==nb)?0:1;
}

void Output()
{
	ofstream fout(O_F);
	fout<<ans<<'\n';
	fout.close();
}