HDU-6273 Master of GCD (소인수 분해 정리 적용)

HDU-6273 Master of GCD (소인수 분해 정리 적용)

여기에 사진 설명 삽입


표제:

  • T 그룹 데이터 제공
  • 각 데이터 그룹의 첫 번째 행에 n과 m을 입력합니다. 즉, 길이가 n이고 초기 값이 1 인 배열에서 m 연산이 수행됨을 의미합니다.
  • 각 연산에 ​​대해 L, R, op 세 개의 숫자를 입력하십시오. op는 2 또는 3 만 가능합니다. 즉, L에서 R까지의 간격에있는 각 숫자를 의미합니다. a [i] = a [i] * op, i = 2,3
  • m 개 연산 후이 n 개의 최대 공약수는 얼마입니까?

아이디어 :

  • n 개의 최대 공약수를 찾으려면이 n 개의 숫자를 소인수로 분해 한 다음 n 개의 분해 공식에 나타난 소인수의 모든 소인수 a와 최소 거듭 제곱 p를 찾은 다음 모두 곱하면 됩니다. a p는 최대 공약수입니다.
  • 질문의 의미에서 각 숫자의 초기 값은 1이고 소인수는 2 또는 3 만 될 수 있습니다. 따라서 a [i]에 2를 곱한 횟수와 3의 횟수를 기록하는 것은 a를 분해하는 것과 같습니다. [i] 소인수로, 그리고 마지막으로 2의 가장 작은 거듭 제곱과 3의 가장 작은 거듭 제곱을 세고 곱합니다 (빠른 거듭 제곱을 사용하고 나머지를 취하는 것을 잊지 마십시오)
  • a [i]에 2와 3을 곱한 횟수를 계산하는 방법은 무엇입니까? 나는 선을 스캔하는 아이디어를 사용하고 책 배열을 사용하여 세고, book [L] ++, book [R + 1] –, 마지막으로 접두사 합계를 계산합니다.

撸 코드 :

#include<math.h>
#include<string.h>
#include<stdio.h>
#include<algorithm>
using namespace std;
typedef long long ll;
long long book[4][100010];
long long mod=998244353;
ll Quick_Power(ll a,ll b)//快速幂
{
    
    
    ll res = 1;
    a %= mod;
    while(b){
    
    
        if(b&1){
    
    
            res = (res * a) % mod;
        }
        a = (a * a) % mod;
        b >>= 1;
    }
    return res%mod;
}
int main()
{
    
    
	int t;
	scanf("%d",&t);
	while(t--){
    
    
		int n,m;
		scanf("%d%d",&n,&m);
		for(int i=0;i<=n+1;i++){
    
    
			book[2][i]=book[3][i]=0;
		}
		int r,l,tag;
		for(int i=0;i<m;i++){
    
    
			scanf("%d%d%d",&l,&r,&tag);
			book[tag][l]++;
			book[tag][r+1]--;
		}
		
		for(int i=1;i<=n;i++){
    
    
			book[2][i]+=book[2][i-1];
			book[3][i]+=book[3][i-1];
			/*由于初始值为 1 ,所以每个数的素因子只有 2 和 3 ,
			通过该步骤得出每个数的素因子的幂次,找到2的最小幂次 和 3 的最小幂次,
			乘积就是最大公约数  */
//			printf("%d  |   %d\n",book[2][i],book[3][i]);  
			
		}
		long long mina=0x3f3f3f3f,minb=0x3f3f3f3f;
		for(int i=1;i<=n;i++){
    
    
			mina=min(mina,book[2][i]);
			minb=min(minb,book[3][i]);
		}
		long long temp1=Quick_Power(2,mina);
		long long temp2=Quick_Power(3,minb);
		printf("%lld\n",(temp1*temp2)%mod);
	}
	return 0;
}

추천

출처blog.csdn.net/DREAM_yao/article/details/109255690