숫자 이론의 오일러 체, 곱셈 역 요소, 빠른 전력 전투

Southwest University of Science and Technology 질문 E 트윈 프라임 (조사 포인트 : 오일러 체, 곱셈 역 요소, 고속 전력 또는 확장 오일러)

머리말

방금 아침에 팬시 어의 곱셈의 역수를 봤는데, 오후 질문은 우연히 테스트를 받았지만 여전히 멈춰서 쓰지 않았습니다. 요약 템플릿 + 템플릿 질문, 오일러 체 템플릿, 곱셈 역 요소 템플릿, 빠른 파워 템플릿. 이력서 엔지니어가되는 것은 AC가 될 수 있지만 불행히도 그럴 자격이 없습니다. 저는 wawawa였습니다.
게임 전에 열심히 일하지 말고 게임 중에 와우 와우.

주제 설명

여기에 사진 설명 삽입
여기에 사진 설명 삽입
주제 링크 : link .

두 가지 문제 해결 아이디어

1. 오일러 체 (쌍둥이 소수 m의 수 찾기)
2. 곱셈 역 요소 (분수를 직접 변조 할 수 없으므로 분수 m / n mod 1e9 + 7의 값을 찾는 데 마지막으로 사용됨)
곱셈 역 요소 공식은 다음과 같습니다. 주어졌습니다.
여기에 사진 설명 삽입
3 개의 빠른 거듭 제곱 (위 Q의 mod-2 전력 문제를 해결하는 데 사용됨).
? ? ? 지나간? ? ? 이거 없어졌어?
사라진 것 같지만 한 문장이 남았는데 n 개 중 2 개가 쌍 소수 일 확률은 어떻게 계산할까요?
아무도 몰라요 우연히도 몰라요

세 가지 문제 해결 코드



#include<bits/stdc++.h>
using namespace std;

const int maxx = 1e7+10;
int prime[maxx+10];//筛素数的数组
int a[maxx+10];//n个数中有几个孪生素数
bool vis[maxx+10];//标记数组,0是i对应是素数,1是非素。

const int mod=1e9+7;//要模的值
typedef long long ll;
void init()       //欧拉筛+判断n中有几个孪生素数的打表。
{
    
    
    vis[0]=vis[1]=1;
    int k=0;
    for(int i=2;i<=maxx;i++){
    
    
    	
        if(vis[i]==0)prime[++k]=i;
        for(int j=1;i*prime[j]<=maxx;j++){
    
    
            vis[i*prime[j]]=1;
            if(i%prime[j]==0)break;
        }
        
    }
    for (ll i = 0; i <= 10000000; ++i) {
    
    
        a[i] = a[i - 1];
        if (!vis[i] && !vis[i - 2]) {
    
    
            ++a[i];
        }
      
    }
    
}


ll ksm(ll a ,ll k)     //快速幂
{
    
    
    ll rec=1;
    while(k)
    {
    
    
        if (k&1)
            rec=((rec%mod)*(a%mod))%mod;
        a=((a%mod)*(a%mod))%mod;
        k>>=1;
    }
    return rec%mod;
}


int main()
{
    
    
    ll n;
    int t;
    cin>>t;
    init();
    
    while(t--)
    {
    
    
        cin>>n;
    	 
    	 
    	
    	  //cout<<bj[n]<<"   ";
    cout<<(a[n])*ksm(n*(n-1)/2,mod-2)%mod<<endl;//我们从1∼N中不放回地抽取两个数,抽到的是孪生素数的概率.
	}
   
    
    return 0;
}

네 가지 요약

숫자 이론 플레이어로서 저는 개인적으로 자주 사용되는 템플릿이 마음에 분명하다고 생각합니다. 템플릿은 대회에서 사용할 수 있지만 타이핑하는 데 능숙한 것이 좋습니다. 결국 이력서 엔지니어는 그다지 좋지 않습니다.

매일 다섯 가지 격려

모든 노력이 여전히 강하다면 남동쪽에서 북서쪽으로 바람을 피우십시오.

추천

출처blog.csdn.net/qq_40826583/article/details/115362033