URAL 1698 自守数

好吧 苟哥总结好了我直接粘了

自守数的定义

 

对于一个k位的自然数n,如果它的平方后的最后k位跟原数相同,那么n就叫做自守数。数学定义表达式为:

 

一位数的自守数有三个,分别为1,5,6。两位数以上的自守数分为A、B两类,A类是以5结尾,B类是以6结尾。

例如,以5结尾的自守数有25,625,90625等;以6结尾的自守数有76、376、9376等。

两类自守数的一个基本性质是:相同位数的两类自守数的和相加等于自守数的位数乘10再加上1,即:

 

5+6=10+1

25+76=100+1

625+376=1000+1

 

关于自守数的两个重要的性质:

(1)一个数为自守数当且仅当它为一个自守数的后缀。

(2)(1除外)n位数的自守数仅有两个(位数包括前导0),优先考虑最高位不为0的时候。

 

一个数为自守数,那么它的所有后缀均为自守数。所以所有位数大于1的自守数的末尾必定为5或6。

对于尾数为5或6这两种自守数,每一种固定长度的自守数至多有1个。

 

 

自守数的计算方法:

 

一个k+1位的自守数F(k+1)可以由F(k)来求得,两类数的计算方法不同。

 

A类:求F(k)的平方,取最后k+1位,若第k+1位是0,则取最后k+2位。

 

例如:

25*25 = 625,得625

6252 = 390625,得90625

8906252 = 793212890625,得2890625

 

B类:

 

求F(k)的平方,取最后k+1位,把最后k+1位的数用10减之代替,若第k+1位是0,则取最后k+2位来减,第k+1位保持为0。

 

例如:

762 = 5776,10-7 = 3,得376
93762 = 87909376,10-9 = 1,得109376

#include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<map>
#include<set>
using namespace std;
#define ll long long
ll gcd(ll a,ll b)
{
    return b?gcd(b,a%b):a;
}
ll phi(long long n)
{
    long long rea=n;
    for(int i=2; i*i<=n; i++)
        if(n%i==0)
        {
            rea=rea-rea/i;
            do
                n/=i;
            while(n%i==0);
        }
    if(n>1)rea=rea-rea/n;
    return rea;
}
ll exp_mod(ll a,ll b,ll c)
{
    a%=c;
    ll ans=1;
    while(b)
    {
        if(b&1) ans=ans*a%c;
        b>>=1,a=a*a%c;
    }
    return ans;
}
int main()
{
    ll a,n;
    cin>>a>>n;
    if(gcd(a,n)!=1)
    {
        puts("0");
        return 0;
    }
    ll p=phi(n),l=(ll)sqrt(p*1.0),ans=1e9;
    for(ll i=1; i<=l; i++)
        if(p%i==0)
        {
            if(exp_mod(a,i,n)==1)ans=min(ans,i);
            if(exp_mod(a,p/i,n)==1)ans=min(ans,p/i);
        }
    printf("%I64d\n",ans);
    return 0;
}
时间: 2024-12-03 16:12:17

URAL 1698 自守数的相关文章

ava 自守数-关于自守数,一个测试用例通不过

问题描述 关于自守数,一个测试用例通不过 自守数 如果某个数的平方的末尾几位数等于这个数,那么就称这个数为自守数. 显然,5和6是一位自守数(5x5=25 6x6=36),25x25=625 76x76=5776,所以25和76是两位自守数. 详细描述: 接口说明 原型: Public static boolean isAutoMorphicNum( int num) 输入参数: num 需要判断的数 输出参数(指针指向的内存区域保证有效): 无 返回值: true 是自守数 false 不是自

自守数算法----C语言实现

#include <stdio.h> //自守数算法 //ep : 25 ^ 2 = 625 76 ^ 2 = 5776 9376 ^ 2 = 87909376 /*ep : * 376 被乘数 * *376 乘数 * ------ --------- * 2256 第一个部分积=被乘数*乘数的倒数第一位 * 2632 第二个部分积=被乘数*乘数的倒数第三位 * 1125 第三个部分积=被乘数*乘数的倒数第三位 *-------- * 141376 将以上的部分积的后3位求和后截取后3位就是3

[HW] OJ记录20题之二

1 查找第一个只出现一次的字符 #include <iostream> #include <cstring> #include <cstdio> using namespace std; bool findChar(char *str, char *ch); int main() { char str[100]; while (cin.getline(str, 100)) { char ch; if (findChar(str, &ch)) { cout<

《风云2》巡回首映5天走6城精彩不断粉丝热拥

北京首映粉丝堵截 腾讯娱乐讯 5日走访6座城市,<风云2>的中国大陆巡回首映可谓一路马不停蹄,但同时明星魅力和粉丝热情,以及广大影迷对<风云2>日益飙高的期待,也使得<风云2>巡回首映一路精彩不断,高潮迭起. 第一站/北京 郑伊健忆友情落泪 <风云2>北京首映礼当晚,最令人印象深刻的一幕,出现在郑伊健和郭富城各自讲述十年兄弟情时.回想起<风云>到<风云2>与郭富城的十载交情,向来内向的伊健一时真情流露,几近哽咽落泪,现场观众无不为之动

2011蓝桥杯(高职)

从4个人中选2个人参加活动,一共有6种选法. 从n个人中选m个人参加活动,一共有多少种选法?下面的函数实现了这个功能. 请仔细分析代码,填写缺少的部分(下划线部分). 注意:请把填空的答案(仅填空处的答案,不包括题面)存入考生文件夹下对应题号的"解答.txt"中即可. 直接写在题面中不能得分. // n 个元素中任取 m 个元素,有多少种取法 int f(int n, int m) {  if(m>n) return 0;  if(m==0) _______________;  

c语言-为啥找找守形数总是多一个

问题描述 为啥找找守形数总是多一个 #include#includeint main(){ char buf1[4] buf2[4]; for (int i = 1000; i < 1111; i++) { int a = 0 b = 3; int n = 9*i; int c = i; while (c!= 0) { buf1[a++] = c % 10 ; c = c / 10; } while (n != 0) { buf2[b--] = n % 10 ; n = n / 10 ; } i

攻易守难?不妨借助AI与软件定义安全来个“剧情”反转

说起企业安全问题,作为一名安全管理员恐怕会有一肚子的苦水,企业出了安全事件,第一个"背锅"的就是自己.面对当前的企业业务和办公环境,网络安全也变成了攻易守难,CSO的苦恼可不是一点点. 如果总结CSO们的苦恼,大致可以分为三点:一是风险被动响应:二是不能全局掌握安全态势:三是安全运维难题. CSO面临的工作可能是这样的 无论哪一个CSO都想让自己建立的安全体系保障的企业安全高枕无忧,不过"敌人"的存在不可能让你如愿以偿. 首先以检测来说,威胁检出率较低.漏报较高是不

java-lucene中search(Query query, int n)函数返回Topdocs每次运行条数不定问题

问题描述 lucene中search(Query query, int n)函数返回Topdocs每次运行条数不定问题 代码如下 package com.alan.demo; import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; impo

悲催,今年有17个网络“数字节”

2013年,17个"数字节"一览 2013.1.4爱你一生一世 2013.2.14爱你一生爱一世 2013.3.14派节 2013.4.13爱你一世是一世 2013.5.20爱你一生我爱你 2013.5.30爱你一生我想你 2013.6.14爱你一生又一世 2013.7.10爱你一生娶定你 2013.8.8爸爸节 2013.8.18八卦节 2013.9.9爱你一生久久 2013.9.12爱你一生就要爱 2013.9.13分手节 2013.10.10萌节 2013.10.11萝莉节 20