zoukankan      html  css  js  c++  java
  • 九九归一

    九九归一


    稍作尝试可得三类情况, 分类讨论:
    1. 根本就没有循环/循环节大于phi(n), 当且仅当a, n不互质
    2. 循环节等于phi(n)
    3. 循环节为phi(n)的因数

    2, 3类情况需要通过运算来判别.
    通过快速幂来加速运算(又是二进制拆分思想…)
    代码不是我的.

    #include<cstdio>
    #include<cstring>
    
    using namespace std;
    const int N=100100;
    int p[N],c[N],ans,n,m,k,x,tot,flag;
    
    long long pow(long long x,int len)
    {
        if (len==1) return x;
        long long t=pow(x,len/2);
        if (len%2)
            return t*t%k*(long long)x%k; else
            return t*t%k;
    }
    
    int main()
    {
        scanf("%d%d",&n,&m);
        k=n;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);
        for (int i=2;i*i<=ans;i++)
        if (ans%i==0)
        {
            p[++tot]=i;
            if (ans/i!=i)
                p[++tot]=ans/i;
        }
        while (m--)
        {
            scanf("%d",&x);
            flag=1;
            for (int i=1;i<=tot;i++)
            if (pow(x,p[i])==1)
            {
                flag=0;
                break;
            }
            if (flag && pow(x,ans)==1)
                printf("1"); else
                printf("0");
        }
        printf("
    ");
    }
    
  • 相关阅读:
    js原生碰撞检测
    基于栈的指令集与基于寄存器的指令集
    偏向锁,轻量级锁
    java 内存模型
    JVM即时编译器
    动态分配
    静态分配
    栈帧笔记
    类加载器
    类加载过程
  • 原文地址:https://www.cnblogs.com/ZeonfaiHo/p/6402852.html
Copyright © 2011-2022 走看看