Problem about GCD(找规律+大素数判断+分解因子)

【数论】 求小于等于 N 的与N互质的所有数的乘积mod N <br />           求小于等于N 的所有与N互质的数的乘积modN。这是今天训练赛的一道题。RP极高的我们愣是找出了结论。<br />           结论:对于 1,2,4,P^n, 2*P^n,答案为 N-1,其余情况都是1。也就是说,1,2,4,以及只有一个质因子(奇数)或者它的1/2只有一个<br />                       质因子(偶数),答案是N-1.其余情况答案均是 1。<br />           附程序:<br />#include <cstdi 阅读详情

Problem about GCD

 Given integer m. Find multiplication of all 1<=a<=m such gcd(a, m)=1 (coprime with m) modulo m. 

Input
Input contains multiple tests, one test per line.
Last line contains -1, it should be skipped.

[Technical Specification]
m <= 10^18

Output
For each test please output result. One case per line. Less than 160 test cases.
Sample Input

1
2
3
4
5
-1

Sample Output

0
1
2
3
4
题意:

给定一个数N(N≤1018)(N≤1018)求出N以内的和N互质的数的乘积再模N

分析:

这道题通过打表可以发现规律

而这实际上数论中的一个结论:

N为1,2,4,以及只有一个质因子(奇数)或者它的1212只有一个质因子(偶数),答案是N-1.其余情况答案均是 1。

因为N很大,所以不可能将质因子全部分解,我们发现对于一个数N它的质因子最多只能有2个大于1e6的,因为3个1e6的质因子相乘就等于1e18了,故根据这个性质,我们只需要筛选出1e6范围内的素数即可

然后将N分解,如果有多于1种质因子则答案为1,而分解完之后剩下的数只有一下四种情况

1)为1,并且素因子种类数为1

2)为1,并且素因子种类数大于1

3)大于1,素因子种类数大于1了

4)大于1,种类数恰好一种这说明这个数本身可能是素数,而判断他是素数因为数太大我们只能使用大素数测试的方法即(拉宾米勒的合数测试),而如果不是素数还有一种可能情况,就是它是两个大于1e6的素因子的乘积,因此我们看一下是不是完全平方数即可(因为最多两个这样的素因子)

code:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1e6+10;
const int S = 8;
ll x;
ll prime[maxn],isprime[maxn],cnt;
void init(){
    cnt = 0;
    memset(isprime,true,sizeof(isprime));
    isprime[0] = isprime[1] = false;
    for(int i = 2 ; i < maxn; i++){
        if(isprime[i]){
            prime[cnt++] = i;
            for(int j = i+i; j < maxn; j += i){
                isprime[j] = false;
            }
        }
    }
}

ll mul(ll a,ll b,ll mod){
    ll ans = 0;
    while(b){
        if(b & 1)
            ans = (ans + a) % mod;
        a = (a + a) % mod;
        b >>= 1;
    }
    return ans;
}

ll q_pow(ll a,ll b,ll mod){
    ll ans = 1;
    while(b){
        if(b & 1)
            ans = mul(ans,a,mod);
        a = mul(a,a,mod);
        b >>= 1;
    }
    return ans;
}

bool check(ll a,ll n,ll x,ll t){
    ll ret = q_pow(a,x,n);
    ll last = ret;
    for(int i = 1; i <= t; i++){
        ret = mul(ret,ret,n);
        if(ret == 1 && last != 1 && last != n-1) return true;
        last = ret;
    }
    if(ret != 1) return true;
    return false;
}

bool Miller_Rabin(ll n){
    if(n < 2) return false;
    if(n == 2) return true;
    if((n & 1) == 0) return false;
    ll x = n - 1;
    ll t = 0;
    while((x & 1) == 0){
        x >>= 1;
        t++;
    }
    for(int i = 0; i < S; i++){
        ll a = rand() % (n - 1) + 1;
        if(check(a,n,x,t))
            return false;
    }
    return true;
}

bool judge(ll x){
    ll num = 0;
    for(int i = 1; prime[i] <= x && i < cnt; i++){
        if(x % prime[i] == 0){
            num++;
            while(x % prime[i] == 0) x /= prime[i];
            if(num > 1) return false;//素因子种类大于1返回false
        }
        if(x == 1) break;
    }
    if(x > 1) num++;//如果剩余大于1种类+1
    if(num > 1) return false;//加上最后一个数素因子种类大于1了返回false
    if(Miller_Rabin(x)) return true;//如果种类数为1,判断是不是素数是就返回true
    ll m = (ll)sqrt(x*1.0);//否则再看是否是完全平方数,因为这样素因子只有一种而且大于1e6的素因子最多两个
    if(m * m == x) return true;
    return false;//其他只能返回false如两个不同的大于1e6的素因子就不行
}
int main(){
    init();
    while(scanf("%lld",&x) != EOF){
        if(x == -1) break;
        if(x != 4 && x % 4 == 0){
            printf("1\n");
            continue;
        }
        if(x == 1 || x == 2 || x == 4){
            printf("%lld\n",x-1);
            continue;
        }
        if(x & 1){//奇数直接判断
            if(judge(x))
                printf("%lld\n",x-1);
            else
                printf("1\n");
        }
        else{//偶数除以2后再判断
            if(judge(x/2))
                printf("%lld\n",x-1);
            else
                printf("1\n");
        }
    }
    return 0;
}
保姆级教程:手把手带你复现APFNet论文的RGBT目标跟踪模型(附完整代码与数据集配置) 本文提供了一份详细的APFNet论文复现指南,涵盖从环境搭建到模型测试的全流程。通过解析多模态融合模块和渐进式训练流程,帮助读者高效完成RGBT目标跟踪模型的复现工作,特别针对训练和测试中的常见问题提供实用解决方案。 阅读详情

相关推荐

ArcGIS基础:点要素分割线要素和提取线要素的交点

第一个实验:【点要素分割线要素】看下原始数据:下图所示,2个红点和一条绿线,用2个点去分割这条线。 找到【数据管理工具】,在找到【要素】,再找到【在点处分割线】,如下图所示。 输入线、点要素,然后在【搜索半径】里输入5米,查看一下结果。 查看结果发现,线段被分割了2段,我们查看一下原因。 发现第2个点与线有一段距离,肯定是大于5米的,所以分割没有成功。可以量测一下距离,重新输入搜索半径。 我们把搜索半径改为200米,勘察结果,被点分割了3段。 接下来使用另外一个工具【在折点处分割线】,如下所示。

yuanYW7556的博客 1万+

hdu 4910 Problem about GCD 找规律+Miller_Rabin算法+线性筛

代码: #include #include #include #include #include #include using namespace std; typedef __int64 LL; const LL NUM=20;//运算次数,Miller_Rabin算法为概率运算,误判率为2^(-NUM); const int maxn=1e6+10; int prime[maxn

冷月之殇 1531

给STM32F103的7寸屏找个新UI:LVGL 8.2裸机移植保姆级教程(附避坑清单)

本文详细介绍了如何将LVGL 8.2裸机移植到STM32F103开发板,特别针对7寸大屏(800×480分辨率)进行优化配置。从环境准备、工程搭建到显示驱动移植、内存优化与性能调优,提供完整的解决方案和避坑清单,帮助开发者快速实现美观的用户界面。

weixin_29181861的博客 413

Educational Codeforces Round 173 (Rated for Div. 2) D - Problem about GCD

考虑不互质的数对的公因数,公因数中含2的最多15*15对,公因数中含3的最多10*10对,公因数中含5的最多6*6对…只有这些对将900对全部填充,才有可能全部不互质。然而当考虑到公因数含37的对时,剩余需要填充450对。将450对分给一段区间30个数,至少有一个数分到15对。当一个数分到15对时,15个37以上的数的乘积超过1e18,矛盾。因次必然存在互质的对。1e18范围内存在两段连续区间,分别从中挑选出一个数,组成对。区间长度均大于等于30时,必然存在互质的对。

qq_51761491的博客 242

嵌入式系统(一):鸿蒙系统

本文为期末复习笔记,内容仅供参考???? 鸿蒙系统是一款面向万物互联时代的、全新的分布式操作系统 鸿蒙提出了基于同一套系统能力、适配多种终端形态的分布式理念 提供全场景(移动办公、运动健康、社交通信、指挥出行、媒体娱乐等)业务能力 华为是OpenHarmony开源项目的共建者、也是共享者之一 鸿蒙技术特性 分布式设计 一次开发,多端部署 系统与硬件解耦,弹性部署 三大分布式能力 分布式软总线 设备间互联互通提供分布式通信能力 从手动发现,进化成自发现 传输高带宽关键技术-极简协议 分布式数据管

weixin_45608532的博客 4306

AUTOSAR BswM配置实战:手把手教你用Vector Davinci Configurator搭建第一个模式管理规则

本文详细介绍了如何使用Vector Davinci Configurator工具配置AUTOSAR BswM模块,实现车身控制ECU的模式管理规则。通过实战案例,从环境准备、核心概念梳理到具体配置步骤,包括ModeRequestPort、ModeCondition、Logical Expression和Rules的构建,帮助工程师快速掌握BswM配置技巧,提升汽车电子软件开发效率。

weixin_28678831的博客 351

Problem about GCD 素数筛+miller rabbin+精度 hdu 4910

彩蛋 Problem about GCD Time Limit: 2000/1000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1128Accepted Submission(s): 289 Problem Description Given intege...

吴明 248

MICS-6814多气体传感器与ESP32-C3 Mini接口构建空气监测系统

cararenuity C3 Mini的多个ADC引脚,Wi-Fi和蓝牙LE以及紧凑的设计使其成为嵌入式物联网应用的绝佳选择。在这个项目中,我们将把MICS-6814多气体传感器与基于esp32 -C3的开发板cararenuity C3 Mini连接起来。更多模拟引脚:与ESP8266只有一个ADC引脚不同,基于esp32 -C3的cararenuity C3 Mini提供多个ADC引脚,使其成为多传感器应用的理想选择。紧凑可靠:该板的小尺寸使其成为嵌入式应用的理想选择,而不会牺牲性能。

hie98894的博客 770

爱情来的太快就像龙卷风

题解 uuuu yyy uuu uuu ooo rrr rr w iii ee ww yyy ooo eee uuu rrr ee yy e 首先再26个键盘上找到u所对应一行u是第几个字母u对应第7个所以对应九宫格第7个格u有四个所以是第七个格里第四个字母s,以此类推

qq_45717538的博客 8万+

PX4 EKF2协方差矩阵‘负定’了怎么办?保姆级排查与数值稳定性修复指南

本文深入解析PX4 EKF2协方差矩阵出现‘负定’问题的原因,并提供全面的排查与修复方案。从理论分析到实践操作,详细介绍了数值稳定性危机的诊断工具、算法加固措施及工程实践中的防御性编程技巧,帮助飞控工程师有效解决滤波算法中的数值稳定性问题。

weixin_28730927的博客 318

Python-自动化绘制股票价格通道线

创建更强大、更可靠的价格通道检测算法。

探索人工智能领域 948

HDU 4910 Problem about GCD 找规律+大素数判断+分解因子

Problem about GCD Time Limit: 2000/1000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 470Accepted Submission(s): 77 Problem Description Given integer m. Fi...

weixin_34413802的博客 139

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

牛客—— Basic Gcd Problem(质因子分解+快速幂)

质因子分解算法 (摘自《算法笔记》) 算法原理: 对一个正整数n来说,如果它存在1和它本身之外的因子,那么一定在sqrt(n)的左右成对出现。 但是对于质因子来说:对一个正整数n来说,如果它存在[2,n]范围内的质因子,要么这些质因子全部小于等于sqrt(n),要么只存在一个大于sqrt(n)的质因子,而其他质因子全部小于等于sqrt(n)。 思路: 1.枚举1~sqrt(n)范围内的所有质因子p,判断p是否为n的因子。 如果p是n的因子,那么给fac数组中增加质因子p,并且初始化其个数为0。然后只

qq_44722533的博客 369

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

(one day one problem)SPOJ - PROD1GCD Product it again (GCD+分解质因子找思路)-数论

题目链接:https://cn.vjudge.net/problem/477808/origin The problem is very simple. given two integers n and m, find the product GCD(1, 1) * GCD(1, 2) * ... * GCD(1, M) * GCD(2, 1) * GCD(2, 2) * ... * GCD

Vision 896

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

hdu 4910 Problem about GCD(Miller Rabin大素数检测)

hdu 4910 Problem about GCD

solotzg 868

GCD Problem

Given a positive integer nnn. Find three distinct positive integers aaa, bbb, ccc such that a+b+c=na + b + c = na+b+c=n and gcd⁡(a,b)=c\operatorname{gcd}(a, b) = cgcd(a,b)=c, where gcd⁡(x,y)\operatorname{gcd}(x, y)gcd(x,y) denotes the greatest common divis

Pretty Boy Fox的博客 718

HDU 4910 / BC 3D Problem about GCD

首先打表,发现一部分是n-1其他是1 找规律发现,对于 素数的n次方 及 2倍素数的n次方 其结果是 n-1 (除2和4外 不能是2的n次方) 对于判断一个数是不是素数 直接米勒罗宾即可 对于判断是不是素数的n次方 有两种方法  可以先判能否开平方和三次方 再暴力处理10^4之内素数即可 我直接套pollard_rho 分解质因数 发现不同质因数就否定 #include #include

weilehuozhe的专栏 404

[BestCoder Round #3] hdu 4910 Problem about GCD

转载自: http://www.kuangbin.net/archives/hdu4910  慢慢学习. HDU 4910 Problem about GCD 求小于等于 N 的与N互质的所有数的乘积MOD N   Problem about GCD Time Limit: 2000/1000 MS (Java/Others)   

逆风的方向 更适合飞翔 1192

Problem 1612 Hero's gcd

题目大意就是要求下面的G: G=1; for(i=1;i<N;i++) for(j=i+1;j<=N;j++) G*=GCD(i,j); /* Here GCD() is a function that finds the greatest common divisor of the two input numbers */ 思路: 首先N最大为20000

L_Ecry的专栏 668

B.Basic Gcd Problem(质因数分解)

B.Basic Gcd Problem(质因数分解) 思路:考虑ccc的贡献次数,我们最后的答案肯定是:ccntc^{cnt}ccnt形式,所以我们只需求出cntcntcnt。 ep:n=16,c=5ep:n=16,c=5ep:n=16,c=5。 显然fc(16)=c×max{fc(i)},i∈{1,2,4,8}f_c(16)=c\times max\{f_c(i)\},i\in\{1,2,4,8\}fc​(16)=c×max{fc​(i)},i∈{1,2,4,8}。 fc(1)=1f_c(1)=1fc​(

Harris-H的博客 961

hdu 4910 Problem about GCD

Problem about GCD Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 341    Accepted Submission(s): 52 Problem Description Given integ

t_xliang的专栏 756

2020牛客暑期多校训练营(第四场)B.Basic Gcd Problem

2020牛客暑期多校训练营(第四场)B.Basic Gcd Problem 题目链接 题目描述 As a great ACMer, ZYB is also good at math and number theory. ZYB constructs a function fc(x)f_c(x)fc​(x) such that: Give some positive integer pairs (ni,ci)(n_i, c_i)(ni​,ci​), ZYB wants to know fci(ni)mod 

旺崽的博客 3537

hdu 4910 Problem about GCD(数论)

题目连接:hdu 4910 Problem about GCD 题目大意:给定M,判断所有小于M并且和M互质的数的积取模M的值。 解题思路:有个数论的结论,若为偶数,M=M/2. 可以写成M=pk,即只有一种质因子时,答案为M-1,否则为1.特殊情况为4的倍数,不包括4. 首先用1e6以内的素数去试除,如果都不可以为p,那么对大于1e6的情况判断一下是否为素数,是素数也可以(k=1)

不慌不忙、不急不躁 2045

CodeForces 338 Problem D GCD Table 拓展中国剩余定理

CF 338 problem D题目描述题目分析 题目链接←点我 题目描述 题目分析 强调文本 强调文本 加粗文本 加粗文本 标记文本 删除文本 引用文本 H2O is是液体。 210 运算结果是 1024 去博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片. // An highlighted block var foo = 'bar'; ...

CHAOS_ORDER的博客 2686

HDU-4910 Problem about GCD

还是先来题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4910这道题的题意就是给你个数n,让你把从1-&gt;n中与n互质的数找出来,并相乘,最后在模 n,输出。这道题的题意可以说是非常暴力了, 不过暴力是不可能过的。我开始想着是可能有什么数学公式或规律,就开始推,果不其然,暴力打表之后就会发现答案要么是1, 要么是n-1. 再进一步观察,发现质数均...

萌新也要搞算法 310

HDU1792A New Change Problem【打表找规律】

Description Now given two kinds of coins A and B,which satisfy that GCD(A,B)=1.Here you can assume that there are enough coins for both kinds.Please calculate the maximal value that you cannot pay and...

No Pain, No Gain . 372
上一篇: Pseudoprime numbers(快速幂模+素性测试)
下一篇: POJ1811 Prime Test(Miller_Rabin素性测试+Pollard_rho质因子分解模板)
Guuuuuu老师儿
博客等级 码龄9年 259粉丝 718原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值