亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? factorialtail.cpp

?? RSA的應用需要用到很多大素數。如何生成大素數
?? CPP
字號:
// FactorialTail.cpp : Defines the entry point for the console application.
//

//#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>

#include "../../HugeCalc_Dll_Import/HugeCalc.h"	// 公共接口
#include "../../HugeCalc_Dll_Import/HugeInt.h"	// 10進制系統
#include "../../HugeCalc_Dll_Import/HugeIntX.h"	// 16進制系統

#ifndef _UNICODE
	#pragma comment( lib, "../../HugeCalc_Dll_Import/HugeCalc.lib" )
#else
	#pragma comment( lib, "../../HugeCalc_Dll_Import/HugeCalcU.lib" )
#endif

//	Project -> Setting -> C/C++ -> Code Generation --> Use run-time library:
//		Win32 Debug:	Debug Multithreaded DLL
//		Win32 Release:	Multithreaded DLL
CHugeInt m_HugeN;
CHugeInt m_HugeT;
CHugeInt m_HugeZ;
UINT32 m_u32L;

UINT32 m_u32Pow2( 0 );
CHugeInt m_HugePow2( 1 );
CHugeInt m_HugePow5( 5 );
CHugeInt m_HugePow10( 1 );

const UINT32 GetVal( const CHugeInt &HugeInt )
{
	SINT64 s64Num = -1;
	HugeInt.CanConvertSINT64( s64Num );
	return ( s64Num <= 0x7FFFFFFF) ? (UINT32)s64Num : -1;
}

CHugeInt &ModPow5( CHugeInt &HugeInt )
{
	switch( CompareAbs( HugeInt %= m_HugePow10, m_HugePow5 ))
	{
		case 0: HugeInt = 0;
		case -1: return HugeInt;
		default: break;
	}

	if ( !m_u32Pow2 )
	{
		return HugeInt -= (( CHugeInt( HugeInt ) *= m_HugePow2 ).RShift( m_u32L ) *= m_HugePow5 );
	}
	else
	{
		return HugeInt -= (( CHugeInt( HugeInt ) *= m_u32Pow2 ).RShift( m_u32L ) *= m_HugePow5 );
	}
}

void PolyMul( const CHUGEINT_VECTOR::iterator dst, const CHUGEINT_VECTOR::iterator src1, const CHUGEINT_VECTOR::const_iterator src2, const BOOL bMod5 = FALSE )
{
	UINT32 i,j;
	for( i=0; m_u32L!=i; ++i )
	{
		dst[i] = 0;
		src1[i] %= m_HugePow10;
	}

	CHugeInt tmp;

	for(i=0; m_u32L!=i; ++i)
	{
		if ( !(!src1[i]) )
		{
			for(j=0; m_u32L-i!=j; ++j)
			{
				if ( !(!src2[j]) )
				{
					dst[i+j] += tmp.Mul( src1[i], src2[j] );
				}
			}
		}
	}

	if ( bMod5 )
	{
		for(i=0; m_u32L!=i; ++i)
		{
			ModPow5( dst[i] );
		}
	}
	else
	{
		for(i=0; m_u32L!=i; ++i)
		{
			dst[i] %= m_HugePow10;
		}
	}
}

VOID Calc_Fun( CHUGEINT_VECTOR &vHugeFun )
{
//	#define TRIANGLE(x,y)  triangle[(x)*s_u32L+(y)]
//	#define F(x,y)         s_vHugeFun[(x)*s_u32L+(y)]
//	#define F_T(x,y)       f_t[(x)*s_u32L+(y)]

	static UINT32 s_u32L( 0 );
	static CHUGEINT_VECTOR s_vHugeFun;

	if ( s_vHugeFun.size() < vHugeFun.size() )
	{
		s_vHugeFun.swap( vHugeFun );
	}
	
	vHugeFun.clear();

	UINT32 i,j,k;
	if ( s_u32L == m_u32L )
	{
		vHugeFun.swap( s_vHugeFun );
		return;
	}
	else if ( s_u32L > m_u32L )
	{
		vHugeFun.resize( m_u32L * m_u32L, CHugeInt() );
		CHUGEINT_VECTOR::iterator pV = vHugeFun.begin();
		CHUGEINT_VECTOR::const_iterator p1 = NULL;
		CHUGEINT_VECTOR::const_iterator p2 = NULL;

		for ( i = 0, p1 = s_vHugeFun.begin(); m_u32L != i; ++i, p1 += s_u32L )
		{
			for ( j = 0, p2 = p1; m_u32L != j; ++j, ++pV, ++p2 )
			{
// 				ModPow5( *pV = F( i, j ));
				ModPow5( *pV = *p2 );
			}
		}
		return;
	}
	s_u32L = m_u32L;

	const UINT32 L2 = m_u32L * m_u32L;

	s_vHugeFun.clear();
	s_vHugeFun.resize( L2, CHugeInt() );

	CHUGEINT_VECTOR triangle( L2, CHugeInt() );
	CHUGEINT_VECTOR f_t( L2, CHugeInt() );
	CHUGEINT_VECTOR tmp1( m_u32L, CHugeInt() );
	CHUGEINT_VECTOR tmp2( m_u32L, CHugeInt() );
	CHUGEINT_VECTOR tmp3( m_u32L, CHugeInt() );
	CHUGEINT_VECTOR tmp4( m_u32L, CHugeInt() );
	CHUGEINT_VECTOR tmp5( m_u32L, CHugeInt() );
	CHugeInt tmp,tmpp,tmppp;

	const CHUGEINT_VECTOR::iterator pfun = s_vHugeFun.begin();
	const CHUGEINT_VECTOR::iterator ptriangle = triangle.begin();
	const CHUGEINT_VECTOR::iterator pf_t = f_t.begin();
	const CHUGEINT_VECTOR::iterator ptmp1 = tmp1.begin();
	const CHUGEINT_VECTOR::iterator ptmp2 = tmp2.begin();
	const CHUGEINT_VECTOR::iterator ptmp3 = tmp3.begin();
	const CHUGEINT_VECTOR::iterator ptmp4 = tmp4.begin();
	const CHUGEINT_VECTOR::iterator ptmp5 = tmp5.begin();

	CHUGEINT_VECTOR::iterator p = NULL;
	CHUGEINT_VECTOR::iterator p1 = NULL;
	CHUGEINT_VECTOR::iterator p2 = NULL;

	//Initialize Pascal Triangle
//	TRIANGLE(0,0) = 1;
//	TRIANGLE(1,0) = 1;
//	TRIANGLE(1,1) = 1;
	*( p = ptriangle ) = 1;
	*( p += m_u32L ) = 1;
	*( ++p ) = 1;
	for(i=2; m_u32L!=i; ++i)
	{
//		TRIANGLE(i,0) = 1;
//		TRIANGLE(i,i) = 1;
//		for(j=1; i!=j; ++j)
//			( TRIANGLE(i,j) =TRIANGLE(i-1,j-1) ) += TRIANGLE(i-1,j);
		p = ptriangle + i * m_u32L;	// TRIANGLE(i,0)
		p1 = p + i;						// TRIANGLE(i,i)
		p2 = p - m_u32L;				// TRIANGLE(i-1,0)
		*p = 1;
		while ( p1 != ++p )
		{
			*p = *p2;
			*p += *(++p2);
		}
		*p = 1;
	}

//	F(0,0)=1;
//	F(0,1)=1;
//	//Initialize F(1,x)
//	F(1,0)=24;
//	F(1,1)=50*5;
//	F(1,2)=35*5*5;
//	F(1,3)=10*5*5*5;
//	F(1,4)=1*5*5*5*5;
	*( p = pfun ) = 1;
	*( p + 1 ) = 1;
	*( p += m_u32L ) = 24;
	*( ++p ) = 50*5;
	*( ++p ) = 35*5*5;
	*( ++p ) = 10*5*5*5;
	*( ++p ) = 1*5*5*5*5;

	//set tmp1[i] to be 5^i
	tmp1[0]=1;
	for(i=1; m_u32L!=i; ++i) ( tmp1[i] = tmp1[i-1] ) *= 5;

	for(j=0; m_u32L!=j; ++j)
	{
		for(k=0, p=ptriangle+j*m_u32L, p1=ptmp1; \
			k<=j; \
			++k, ++p, ++p1 )
		{
			ModPow5( *p *= *p1 );
		}
	}

	for(i=2; m_u32L!=i; ++i)
	{
		//Set F(i,x) now
		for(j=0, p1=pfun+(i-1)*m_u32L; \
			m_u32L!=j; \
			++j, ++p1)
		{
			for(k=0, p=pf_t+j*m_u32L, p2=ptriangle+j*m_u32L; \
				k<=j; \
				++k, ++p, ++p2)
			{				
//				ModPow5( F_T(j, k ).Mul( F(i-1,j), TRIANGLE(j,k) ));
				ModPow5( p->Mul( *p1, *p2 ));
			}
		}

		for(j=0, p=ptmp4, p1=pfun+(i-1)*m_u32L, p2=ptmp1; \
			m_u32L!=j; \
			++j, ++p, ++p1, ++p2)
		{ //tmp4 is F(i-1,j)*5^j mod 5^m_u32L
// 			ModPow5( tmp4[j].Mul( F(i-1,j), tmp1[j] ));
			ModPow5( p->Mul( *p1, *p2 ));
		}

		for(j=0; m_u32L!=j; ++j) tmp3[j]=0;
		for(j=0; m_u32L!=j; ++j)
		{//Adding F(i-1,j)*(5x+1)^j mod 5^m_u32L into tmp3
			for(k=0, p=ptmp3, p1=pf_t+j*m_u32L; \
				k<=j; \
				++k, ++p, ++p1)
			{
//				tmp3[k] += F_T(j, k );
 				*p += *p1;
			}
		}
		//Next get Multiplication of polynomial tmp4, tmp3 into tmp5
		PolyMul( ptmp5, ptmp3, ptmp4, FALSE ); //tmp5=tmp3*tmp4;

		tmp2[0]=1; //set tmp2 to 2^j
		for(j=1; m_u32L!=j; ++j) ( tmp2[j] = tmp2[j-1] ) *= 2;

		for(j=0; m_u32L!=j; ++j) tmp3[j]=0;
		for(j=0; m_u32L!=j; ++j)
		{ //Adding F(i-1,j)*(5x+2)^j mod 5^m_u32L into tmp3
			for(k=0, p=ptmp3, p1=pf_t+j*m_u32L, p2=ptmp2+j; \
				k<=j; \
				++k, ++p, ++p1,--p2)
			{
// 				tmp3[k] += tmp.Mul( F_T(j, k ), tmp2[j-k] );//*2^(j-k)
				*p += tmp.Mul( *p1, *p2 );//*2^(j-k)
			}
		}

		PolyMul( ptmp4, ptmp3, ptmp5, FALSE );//tmp4=tmp3*tmp5

		tmp2[0]=1; //set tmp2 to 3^j
		for(j=1; m_u32L!=j; ++j) ( tmp2[j] = tmp2[j-1] ) *= 3;

		for(j=0; m_u32L!=j; ++j) tmp3[j]=0;
		for(j=0; m_u32L!=j; ++j)
		{ //Adding F(i-1,j)*(5x+3)^j mod 5^m_u32L into tmp3
			for(k=0, p=ptmp3, p1=pf_t+j*m_u32L, p2=ptmp2+j; \
				k<=j; \
				++k, ++p, ++p1,--p2)
			{
// 				tmp3[k] += tmp.Mul( F_T(j, k ), tmp2[j-k] );//*3^(j-k)
				*p += tmp.Mul( *p1, *p2 );//*3^(j-k)
			}
		}

		PolyMul( ptmp5, ptmp3, ptmp4, FALSE ); //tmp5=tmp3*tmp4;

		tmp2[0] = 1; //set tmp2 to 4^j
		for(j=1; m_u32L!=j; ++j) (tmp2[j]=tmp2[j-1]) *= 4;

		for(j=0; m_u32L!=j; ++j) tmp3[j]=0;
		for(j=0; m_u32L!=j; ++j)
		{ //Adding F(i-1,j)*(5x+4)^j mod 5^m_u32L into tmp3
			for(k=0, p=ptmp3, p1=pf_t+j*m_u32L, p2=ptmp2+j; \
				k<=j; \
				++k, ++p, ++p1,--p2)
			{
// 				tmp3[k] += tmp.Mul( F_T(j, k ), tmp2[j-k] );//*4^(j-k)
				*p += tmp.Mul( *p1, *p2 );//*4^(j-k)
			}
		}
		PolyMul( pfun+i*m_u32L, ptmp3, ptmp5, TRUE ); //tmp4=tmp3*tmp5;
	}

	for(i=1,p=pfun+i*m_u32L; m_u32L!=i; ++i)
	{
// 		PolyMul( ptmp4, pfun+i*m_u32L, pfun+(i-1)*m_u32L, TRUE );
		PolyMul( p1=ptmp4, p, p-m_u32L, TRUE );
		for(j=0; m_u32L!=j; ++j,++p, ++p1)
// 			F(i,j).Swap( tmp4[j] );
			p->Swap( *p1 );
    }

	triangle.clear();
	f_t.clear();
	tmp1.clear();
	tmp2.clear();
	tmp3.clear();
	tmp4.clear();
	tmp5.clear();

	vHugeFun.swap( s_vHugeFun );

#if 0
	FILE * fptr = fopen("F36.txt","w");
	for( i=1,p=pfun+i*m_u32L; m_u32L!=i; ++i)
	{
		fprintf(fptr,"\n\t");
		for(j=0; m_u32L!=j; ++j,++p)
		{
//			fprintf(fptr, F(i,j).ConvertToStr(FS_NORMAL) );
			fprintf(fptr, p->ConvertToStr(FS_NORMAL) );
			fprintf(fptr,", ");
		}
	}
	fflush(fptr);
	fclose(fptr);
#endif
}

void Get_m5L( CHugeInt &m5L )
{
	CARRY_PARAM CarryParam;
	U32_VECTOR &vU32Num = CarryParam.vU32Num;
	CarryParam.u32Carry = 5;
	// 注意:如果未注冊,所得到的結果 CarryParam 有可能被隨機干擾,從而導致結果不正確!
	m_HugeN.ConvertToCarry( CarryParam );
	const U32_VECTOR::const_iterator p_begin = vU32Num.begin();
	const U32_VECTOR::const_iterator p_end = vU32Num.end();

	U32_VECTOR::const_iterator p = p_begin;

	UINT32 u32Sum = 0;
	p = p_begin - 1;
	while ( p_end != ++p )
	{
		u32Sum += *p;
	}
	(( m_HugeZ = m_HugeN ) -= u32Sum ) /= 4;

	BOOL bOdd = FALSE;
	p = p_begin + m_u32L;
	while ( p_end > p )
	{
		if ( (*p&1) )
		{
			bOdd = !bOdd;
		}
		p += 2;
	}
	if ( bOdd )
	{
		--( m5L = m_HugePow5 );
	}
	else
	{
		m5L = 1;
	}

	CHUGEINT_VECTOR vHuge5( 5, CHugeInt());
	vHuge5[ 0 ] = 0;
	( vHuge5[ 1 ] = 5 ).Pow( m_u32L - 1 );
	( vHuge5[ 2 ] = vHuge5[ 1 ] ) *= 2;
	( vHuge5[ 3 ] = vHuge5[ 2 ] ) += vHuge5[ 1 ];
	( vHuge5[ 4 ] = vHuge5[ 2 ] ) *= 2;
	
	CHugeInt t1, t2, tmp;
// 	ModPow5( t2 = m_HugeN );
	U32_VECTOR::const_iterator pHead = p_begin + m_u32L;
	{
		if ( p_end < pHead )
		{
			pHead = p_end;
		}
		CARRY_PARAM CarryParamL;
		CarryParamL.nSign = 1;
		CarryParamL.u32Carry = 5;
		CarryParamL.vU32Num.swap( U32_VECTOR( p_begin, pHead ));
		t2 = CarryParamL;
	}

	static UINT32 s_u32L( 0 );
	static CHUGEINT_VECTOR vHugeFun;
	if ( s_u32L != m_u32L )
	{
		Calc_Fun( vHugeFun );
		s_u32L = m_u32L;
	}

	const CHUGEINT_VECTOR::const_iterator pV_end = vHugeFun.end();
	CHUGEINT_VECTOR::const_iterator pV_mem = vHugeFun.begin();
	CHUGEINT_VECTOR::const_iterator pV = pV_mem;

	UINT32 i, j;
	UINT32 u32Step = 0;
	pHead = (--( p = p_begin )) + m_u32L;
	while( p_end != ++p )
	{
		if ( pV_end != pV_mem )
		{
			pV_mem += m_u32L;
		}

		for( i=0; (*p)!=i; ++i )
		{
			--t2;
			t1 = 0;
			pV = pV_mem;
			for( j=m_u32L-1; 0!=j; --j )
			{
				t1.Swap( tmp.Mul( t1 += *(--pV), t2 ) %= m_HugePow10 );
			}
			m5L.Swap( tmp.Mul( t1 += *(--pV), m5L )) %= m_HugePow10;
		}

		t2 /= 5;
		if ( p_end > ++pHead )
		{
			t2 += vHuge5[ *pHead ];
		}

		++u32Step;
	}
	ModPow5( m5L );
}

void Calc_Short( VOID ){
	UINT32 u32N = GetVal( m_HugeN );
	m_HugeT.Factorial( u32N );

	UINT32 u32Count5 = 0;
	while( 0 != u32N )
	{
		u32Count5 += ( u32N /= 5 );
	}

//	m_HugeZ = u32Count5;
	m_HugeT.RShift( u32Count5 ) %= m_HugePow10;
	printf( m_HugeT.ConvertToStr() );
	printf("\n");
}

void Calc(){
	if( m_HugeN < m_u32L*4 )
	{
		Calc_Short();
		return;
	}

	CHugeInt m5L;
	Get_m5L( m5L );  //m5L = final_result % (5^m_u32L)

	CHugeInt HugeExp( m_HugeZ );
	HugeExp += m_u32L;

	CHugeInt twomL( 2 );

	//	mpz_powm(twomL,twomL,HugeExp,m_HugePow5);// (twomL = 2^(-HugeExp) mod (5^HugeExp))
	if ( m_HugePow5 < 0x10000000 )
	{
		const UINT32 u32Mod = GetVal( m_HugePow5 );
		const UINT32 u32Phi = u32Mod / 5 * 4;
		twomL = HugeCalc::PowMod( 2, u32Phi - (UINT32)(HugeExp % u32Phi), u32Mod );
	}
	else
	{
		CHugeInt HugePhi( m_HugePow5 );
		( HugePhi /= 5 ) *= 4;	// Euler
		HugeExp %= HugePhi;
		if ( !HugeExp )
		{
			twomL = 1;
		}
		else
		{
			HugeExp.Negate() += HugePhi;
			twomL.PowMod( 2, HugeExp, m_HugePow10 );
		}
	}

	ModPow5( twomL *= m5L );			//twomL = (m5L*2^(-m_u32L)) % (5^m_u32L)
 	m_HugeT.Swap( twomL ) <<= m_u32L;	//2^m_u32L * (m5L*2^(-m_u32L))%(5^m_u32L), the final m_HugeT
	printf( m_HugeT.ConvertToStr() );
	printf("\n");
}

int
main(void)
{
	printf("Call %s", HugeCalc::GetVersion());
	if ( HC_LICENSE_ALL == HugeCalc::GetLicenseLevel() )
	{
		printf("\n");
	}
	else
	{
		printf(" (Unregistered)\n");
	}

	if ( HC_LICENSE_NONE == HugeCalc::GetLicenseLevel() )
	{
		printf( "\r\n您未通過 HugeCalc 的認證許可!\r\n\r\n" \
				"解決方案可選下列方案之一:\r\n" \
				"    一、請移動和[或]修改文件名為:/CopyrightByGuoXianqiang/.../HugeCalc.exe;\r\n" \
				"    二、請至 HugeCalc.chm 相關頁面進行注冊(一勞永逸)。\r\n\r\n" );

		system("pause");
		return -1;
	}

	while (TRUE)
	{
		printf("\nPlease input large number N, so that we could process for N!\n(if N is 0 then exit) N=");
		char buffer[1032] = { 0 };
		scanf("%s",buffer);
		if ( 0 > (m_HugeN = buffer).GetSign())
		{
			m_HugeN.Negate();
		}

		if ( !m_HugeN )
			return 0;

		if( m_HugeN.GetDigits()>1024 )
		{
			printf("Current only process number whose length no more than 1024\n");
			return -1;
		}

		printf("Please input number of digits to get (no more than 256):");
		scanf("%d",&m_u32L);
		if(m_u32L>256){
			printf("Input Out of range\n");
			return -1;
		}
		if(m_u32L<4)m_u32L=4;
		m_u32Pow2 = ( 32 > m_u32L ) ? ( 1UL << m_u32L ) : 0;

		( m_HugePow2 = 1 )<<= m_u32L;
		( m_HugePow5 = 5 ).Pow( m_u32L );
		( m_HugePow10 = 1 ).LShift( m_u32L );

		printf("Calcuate last %d non-zero digits of %s\n", m_u32L, m_HugeN.ConvertToStr());
		
		HugeCalc::EnableTimer();
		HugeCalc::ResetTimer();

		Calc();
		
		#if 1
			printf("timer: %s s\n", HugeCalc::ShowTimer( TRUE, FALSE ) );
		#else
			printf("timer: %s\n", HugeCalc::ShowTimer( TRUE, TRUE ) );
		#endif

		m_HugeN = 0;
		m_HugeT = 0;
		m_HugeZ = 0;
		m_HugePow2 = 1;
		m_HugePow5 = 5;
		m_HugePow10 = 1;
	}

	system("pause");
	return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美国产视频在线| 91视频精品在这里| 欧美成人免费网站| 另类调教123区| 日韩精品一区二区三区蜜臀| 日本不卡一区二区| 日韩你懂的电影在线观看| 蜜臀91精品一区二区三区| 欧美电影免费观看完整版| 黄色精品一二区| 欧美国产精品劲爆| 一本久道中文字幕精品亚洲嫩| 亚洲男人的天堂一区二区| 在线观看国产一区二区| 蜜臀av性久久久久蜜臀av麻豆| 久久综合九色综合97婷婷女人 | 成人av网站在线观看免费| 国产精品入口麻豆九色| 欧洲人成人精品| 日本视频中文字幕一区二区三区| 久久久亚洲午夜电影| 成人不卡免费av| 香蕉久久夜色精品国产使用方法 | 色综合色狠狠天天综合色| 一区二区不卡在线播放| 911精品国产一区二区在线| 久久99精品一区二区三区三区| 国产欧美视频在线观看| 91农村精品一区二区在线| 日韩中文字幕麻豆| 欧美国产日韩a欧美在线观看| 欧洲视频一区二区| 国产成都精品91一区二区三| 一区二区三区不卡在线观看 | 夜夜精品浪潮av一区二区三区| 日韩三级视频在线观看| 99久久精品免费看国产| 久久精品国产在热久久| 中文字幕在线不卡| 亚洲精品中文在线| fc2成人免费人成在线观看播放| 91.成人天堂一区| 国产福利精品一区二区| 亚洲国产日韩综合久久精品| 91精品国产91热久久久做人人| 国产精品羞羞答答xxdd| 亚洲va欧美va天堂v国产综合| 国产视频在线观看一区二区三区| 欧美在线视频你懂得| 国产精品综合久久| 午夜精品福利在线| 国产精品久久久久久久裸模 | 678五月天丁香亚洲综合网| 国产白丝网站精品污在线入口| 三级久久三级久久| 一区二区三区中文字幕| 国产日韩欧美不卡在线| 91精品国产色综合久久不卡蜜臀 | 日韩理论片在线| 久久久久久久综合| 日韩一区二区在线观看视频播放| 色综合一区二区| 成人综合婷婷国产精品久久| 久久精品国产成人一区二区三区| 亚洲一区二区三区国产| 国产精品视频免费| 欧美成人一区二区三区片免费| 欧美男生操女生| 欧美日韩精品一区二区三区| 一本久道久久综合中文字幕| 国产成人av一区二区三区在线| 久久国产麻豆精品| 麻豆精品在线播放| 免费成人在线播放| 五月开心婷婷久久| 午夜伦理一区二区| 亚洲成av人片在线| 亚洲五月六月丁香激情| 一区二区三区精密机械公司| 日韩毛片在线免费观看| 国产精品不卡在线观看| 国产精品美女一区二区| 国产午夜亚洲精品午夜鲁丝片| 97se狠狠狠综合亚洲狠狠| 国产suv精品一区二区6| 成人国产在线观看| 国产精品一区二区免费不卡| 久久成人久久爱| 美女mm1313爽爽久久久蜜臀| 亚洲国产精品久久艾草纯爱| 国产视频一区在线观看| 国产精品免费久久久久| 国产精品嫩草影院com| 26uuu亚洲婷婷狠狠天堂| 欧美大片国产精品| 欧美肥妇bbw| 91精品一区二区三区在线观看| 在线观看日韩av先锋影音电影院| 欧美日韩激情在线| 欧美日韩一区高清| 欧美日韩国产一区二区三区地区| 欧美日韩在线免费视频| 欧美色区777第一页| 欧美一a一片一级一片| 欧美性极品少妇| 99久久99久久精品免费看蜜桃| 高清不卡一二三区| 色综合久久中文字幕| 91久久国产综合久久| 欧美色精品在线视频| 欧美视频一区在线| 欧美一区午夜视频在线观看| 日韩精品一区国产麻豆| 精品少妇一区二区三区在线播放 | 亚洲一区二区在线观看视频| 一区二区成人在线视频| 日韩精品1区2区3区| 国产精品一区二区91| www.欧美.com| 欧美一级艳片视频免费观看| 精品国产乱码久久久久久图片| 亚洲欧美综合网| 亚洲va欧美va国产va天堂影院| 韩国一区二区在线观看| www.亚洲国产| 日韩欧美国产电影| 中文字幕高清不卡| 三级在线观看一区二区| 国产**成人网毛片九色 | 亚洲精品久久嫩草网站秘色| 婷婷一区二区三区| 国产麻豆视频一区| 欧美日韩激情在线| 欧美激情资源网| 亚洲三级小视频| 青青草国产精品97视觉盛宴| 国产福利一区二区三区视频在线| 色悠悠亚洲一区二区| 久久精品一二三| 亚洲综合免费观看高清完整版| 免费成人小视频| 91亚洲午夜精品久久久久久| 91精品国产综合久久久蜜臀粉嫩| 欧美成人a视频| 日韩综合在线视频| 成人激情图片网| 欧美一区二区三区思思人| 欧美国产成人在线| 日本麻豆一区二区三区视频| 国产乱码字幕精品高清av| 欧美乱妇15p| 国产精品国产三级国产普通话99 | 日本欧美一区二区三区乱码| 91亚洲男人天堂| 精品成人a区在线观看| 亚洲自拍另类综合| 成人av网站免费| www亚洲一区| 日韩极品在线观看| 欧洲激情一区二区| 欧美国产精品专区| 亚洲尤物在线视频观看| 国产一区二区调教| 欧美精品aⅴ在线视频| 久久久亚洲欧洲日产国码αv| 香蕉影视欧美成人| 91蜜桃免费观看视频| 国产亚洲综合色| 蜜臀精品一区二区三区在线观看 | 国产精品午夜电影| 国产成人一级电影| 日韩精品中文字幕在线不卡尤物| 亚洲影视在线观看| 一本大道av一区二区在线播放| 国产精品欧美一区喷水| 久99久精品视频免费观看| 欧美美女一区二区三区| 亚洲婷婷综合久久一本伊一区| 成人av电影在线播放| 中文在线免费一区三区高中清不卡| 蜜桃传媒麻豆第一区在线观看| 欧美日韩黄色影视| 午夜视频久久久久久| 在线免费一区三区| 一区二区免费在线| 欧美吻胸吃奶大尺度电影| 亚洲品质自拍视频网站| 91在线精品一区二区三区| 久久精品日产第一区二区三区高清版 | 2020国产精品| 国产麻豆精品视频| 国产精品免费看片| 99国产精品久久久久久久久久 | 欧美男同性恋视频网站| 亚洲国产成人av网| 欧美性色aⅴ视频一区日韩精品| 久久久777精品电影网影网| 播五月开心婷婷综合| 国产精品色噜噜| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 |