GCD

题目描述

输入

 The first line is an positive integer  T . (1<=T<= 10^3) indicates the number of test cases. In the next T lines, there are three positive integer n, m, p (1<= n,m,p<=10^9) at each line.

输出

样例输入

1 
1 2 3

样例输出

 

1

 

先把所有的1+Sn算出来,你会发现1+Sn=A(n+2);

 

再双重循环算出前面几个gcd(1+Sn,1+Sm)%p,结果是A【gsd(n+2,m+2)】%p;

直接循环解决就行了

#include<stdio.h>
long long gcd(long long a,long long b)
{
	long long t;
	while(b)
	{
		t=a%b;
		a=b;
		b=t;
	}
	return a;
}
int main()
{
	long long t,m,n,p,i,sum,sum1,sum2,ans;
	while(scanf("%lld",&t)!=EOF)
	{
		while(t--)
		{
			scanf("%lld%lld%lld",&n,&m,&p);
			if(n>m)
				ans=gcd(n+2,m+2);
			else 
				ans=gcd(m+2,n+2);
			if(ans==0||ans==1||ans==2)
			sum=1;
			sum1=1;
			sum2=1;
			for(i=2;i<ans;i++)
			{
				sum=sum1+sum2;
				sum=sum%p;
				sum1=sum2;
				sum2=sum;
			}	
			printf("%lld\n",sum);
		}
	}
	return 0;
}

 

 

 

 

 

posted @ 2018-04-16 23:02  宿星  阅读(105)  评论(0编辑  收藏  举报