ABC222 G - 222(数论,欧拉定理)

Posted live4m

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ABC222 G - 222(数论,欧拉定理)相关的知识,希望对你有一定的参考价值。

题意:

解法:

设 最 后 的 答 案 为 n 222... = 2 9 ( 1 0 n − 1 ) 2 9 ( 1 0 n − 1 ) = 0 ( m o d   k ) 2 ( 1 0 n − 1 ) = 0 ( m o d   9 k ) 1 0 n − 1 = 0 ( m o d   9 k g c d ( 9 k , 2 ) ) 1 0 n = 1 ( m o d   9 k g c d ( 9 k , 2 ) ) 设 M = 9 k g c d ( 9 k , 2 ) 1 0 n = 1 ( m o d   M ) 容 易 证 明 10 和 M 互 质 , 此 时 根 据 欧 拉 定 理 有 : 1 0 ϕ ( M ) = 1 ( m o d   M ) n 一 定 是 ϕ ( M ) 的 因 子 O ( s q ) 枚 举 因 子 , 取 合 法 的 最 小 值 即 可 . − − − − − 待 补 : 为 什 么 n 一 定 是 ϕ ( M ) 的 因 子 ? 设最后的答案为n\\\\ 222...=\\frac{2}{9}(10^n-1)\\\\ \\frac{2}{9}(10^n-1)=0 (mod\\ k)\\\\ 2(10^n-1)=0(mod\\ 9k)\\\\ 10^n-1=0(mod\\ \\frac{9k}{gcd(9k,2)})\\\\ 10^n=1(mod\\ \\frac{9k}{gcd(9k,2)})\\\\ 设M=\\frac{9k}{gcd(9k,2)}\\\\ 10^n=1(mod\\ M)\\\\ 容易证明10和M互质,此时根据欧拉定理有:\\\\ 10^{\\phi(M)}=1(mod\\ M)\\\\ n一定是\\phi(M)的因子\\\\ O(sq)枚举因子,取合法的最小值即可.\\\\ -----\\\\ 待补:为什么n一定是\\phi(M)的因子?\\\\ n222...=92(10n1)92(10n1)=0(mod k)2(10n1)=0(mod 9k)10n1=0(mod gcd(9k,2)9k)10n=1(mod gcd(9k,2)9k)M=gcd(9k,2)9k10n=1(mod M)10M,:10ϕ(M)=1(mod M)nϕ(M)O(sq),.nϕ(M)?

code:

#include<bits/stdc++.h>
#define MULTI_CASE
#define SYNC_OFF
#define PI pair<int,int>
#define ll long long
#define int long long
using namespace std;
// const int mod=998244353;
const int mod=1e9+7;
const int maxm=2e6+5;
int ppow(int a,int b,int mod){
    int ans=1%mod;a%=mod;
    while(b){if(b&1)ans=1ll*ans*a%mod;a=1ll*a*a%mod;b>>=1;}
    return ans;
}
int gcd(int a,int b){
    return b==0?a:gcd(b,a%b);
}
int k;
int phi(int n){
    int ans=n;
    for(int i=2;i*i<=n;i++){
        if(n%i==0){
            while(n%i==0)n/=i;
            ans=ans/i*(i-1);
        }
    }
    if(n!=1)ans=ans/n*(n-1);
    return ans;
}
bool check(int n,int mod){
    return ppow(10,n,mod)==1;
}
void solve(){
    cin>>k;
    int M=9*k/gcd(9*k,2);
    int P=phi(M);
    set<int>s;
    for(int i=1;i*i<=P;i++){
        if(P%i==0){
            if(check(i,M)){
                s.insert(i); 
            }
            if(check(P/i,M)){
                s.insert(P/i);
            }
        }
    }
    if(s.size())cout<<*s.begin()<<endl;
    else cout<<-1<<endl;
}
void Main(){
    #ifdef MULTI_CASE
    int T;cin>>T;while(T--)
    #endif
    solve();
}
void Init(){
    #ifdef SYNC_OFF
    ios::sync_with_stdio(0);cin.tie(0);
    #endif
    #ifndef ONLINE_JUDGE
    freopen("../in.txt","r",stdin);
    freopen("../out.txt","w",stdout);
    #endif
}
signed main(){
    Init();
    Main();
    return 0;
}

以上是关于ABC222 G - 222(数论,欧拉定理)的主要内容,如果未能解决你的问题,请参考以下文章

数学数论初探欧拉定理

数论之欧拉定理

《夜深人静写算法》数论篇 - (17) 扩展欧拉定理

数论一(欧拉函数+费马小定理)

「数论基础」欧拉定理(费马小定理)

数论——欧拉定理