这篇博客讲的很好:

https://www.cnblogs.com/ZERO-/p/9302169.html

题目描述

木南有一天学习了欧拉函数,知道了对正整数n,欧拉函数是小于n的正整数中与n互质的数的数目。那么他定义f(n)为有多少个小于等于n的数可以整除n。

例如f(4)=3。(可以被1,2,4整除)。

那么你可以写个程序计算一下f(n)吗?

输入

输入一个n  n≤1018n\le 10^{18}n≤1018

输出

输出f(n)

输出时每行末尾的多余空格,不影响答案正确性

样例输入复制

999999999999999989

样例输出复制

2
#include<iostream>         //这应该是求一个数的因子个数。
#include<algorithm>
#include<cstring>
#include<iomanip>
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<cstdlib>
#include<set>
#include<map>
#include<ctime>
#include<stack>
#include<queue>
#include<vector>
#include<set>
using namespace std;
typedef long long ll;
const ll NUM=10;//运算次数,Miller_Rabin算法为概率运算,误判率为2^(-NUM);
ll t,f[100];
ll mul_mod(ll a,ll b,ll n)//求a*b%n,由于a和b太大,需要用进位乘法
{a=a%n;b=b%n;ll s=0;while(b){if(b&1)s=(s+a)%n;a=(a<<1)%n;b=b>>1;}return s;
}
ll pow_mod(ll a,ll b,ll n)//求a^b%n
{a=a%n;ll s=1;while(b){if(b&1)s=mul_mod(s,a,n);a=mul_mod(a,a,n);b=b>>1;}return s;
}
bool check(ll a,ll n,ll r,ll s)
{ll ans=pow_mod(a,r,n);ll p=ans;for(ll i=1;i<=s;i++){ans=mul_mod(ans,ans,n);if(ans==1&&p!=1&&p!=n-1)return true;p=ans;}if(ans!=1) return true;return false;
}
bool Miller_Rabin(ll n)//Miller_Rabin算法,判断n是否为素数
{if(n<2) return false;if(n==2) return true;if(!(n&1)) return false;ll r=n-1,s=0;while(!(r&1)){r=r>>1;s++;}for(ll i=0;i<NUM;i++){ll a=rand()%(n-1)+1;if(check(a,n,r,s))return false;}return true;
}
ll gcd(ll a,ll b)
{return b==0?a:gcd(b,a%b);
}
ll Pollard_rho(ll n,ll c)//Pollard_rho算法,找出n的因子
{ll i=1,j,k=2,d,p;ll x=rand()%n;ll y=x;while(true){i++;x=(mul_mod(x,x,n)+c)%n;if(y==x) return n;if(y>x) p=y-x;else p=x-y;d=gcd(p,n);if(d!=1&&d!=n) return d;if(i==k){y=x;k+=k;}}
}
void find(ll n)//找出n的所有因子
{if(Miller_Rabin(n)){f[t++]=n;//保存所有因子。 return;}ll p=n;while(p>=n)p=Pollard_rho(p,rand()%(n-1)+1);//由于p必定为合数,所以通过多次求解必定能求得答案find(p);find(n/p);
}
int main()
{srand(time(NULL));//随机数设定种子ll n;cin>>n;if(n==1){cout<<"1"<<endl;return 0;}t=0;find(n);sort(f,f+t);map<ll,int>q;for(int i=0;i<t;i++){q[f[i]]++;}map<ll,int>::iterator it;ll ans=1;for(it=q.begin();it!=q.end();it++){int s=it->second;ans*=1+s;              //求因子个数的公式。 }cout<<ans<<endl;       return 0;
}

算个欧拉函数给大家助助兴(米勒拉宾(判断素数)+Pollard_rho(求一个大数的因子 ))相关推荐

  1. 数论 —— 欧拉函数

    [定义] 对正整数 n,欧拉函数是小于等于 n 的数中与 n 互质的数的个数,记作: 例如:,因为 1.3.5.7 均与 8 互质. [性质] 1)若 n 为一素数 p,则: 2)若 n 为一素数 p ...

  2. AcWing 874. 筛法求欧拉函数(线性筛法求欧拉函数模板)

    给定一个正整数 n,求 1∼n 中每个数的欧拉函数之和. 输入格式 共一行,包含一个整数 n. 输出格式 共一行,包含一个整数,表示 1∼n 中每个数的欧拉函数之和. 数据范围 1≤n≤10^6 输入 ...

  3. CCPC-Wannafly Winter Camp Day3 (Div2, onsite) F 小清新数论 欧拉函数的利用 莫比乌斯反演 杜教筛

    F - 小清新数论 做法一:欧拉函数 #include<stdio.h> #include<bits/stdc++.h> using namespace std; #defin ...

  4. 数论 - 分解质因数+欧拉函数 - Relatives POJ - 2407

    数论 - 分解质因数+欧拉函数 文章目录 数论 - 分解质因数+欧拉函数 一.分解质因数 二.欧拉函数 三.模板: Relatives POJ - 2407 一.分解质因数 由 算 术 基 本 定 理 ...

  5. 突然想写一篇有关欧拉函数的博客

    关于欧拉函数: 定义: φ(n)表示1~n中与n互质的数的个数: 求法: 已知n的标准分解式为: (哦对了,这里所有的因子都是质因子) ​那么 然后求欧拉函数的两种方法: 1.按照定义暴力求解: in ...

  6. (hdu step 7.2.1)The Euler function(欧拉函数模板题——求phi[a]到phi[b]的和)

    题目: The Euler function Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...

  7. 【bzoj2705】[SDOI2012]Longge的问题 欧拉函数

    题目描述 Longge的数学成绩非常好,并且他非常乐于挑战高难度的数学问题.现在问题来了:给定一个整数N,你需要求出∑gcd(i, N)(1<=i <=N). 输入 一个整数,为N. 输出 ...

  8. poj2480(利用欧拉函数的积性求解)

    题目链接:  http://poj.org/problem?id=2480 题意:∑gcd(i, N) 1<=i <=N,就这个公式,给你一个n,让你求sum=gcd(1,n)+gcd(2 ...

  9. POJ 3090 Visible Lattice Points 【欧拉函数】

    <题目链接> 题目大意: 给出范围为(0, 0)到(n, n)的整点,你站在(0,0)处,问能够看见几个点. 解题分析: 很明显,因为 N (1 ≤ N ≤ 1000) ,所以无论 N 为 ...

最新文章

  1. 百度短视频推荐系统的目标设计
  2. java nginx tomcat_Nginx + Tomcat (java )服务器部署
  3. java 获取光标_如何在java中使用Windows API获取当前鼠标光标类型?
  4. php怎么上传函数,PHP单文件上传原理及上传函数的封装操作示例
  5. 计算机组成原理中ID是什么,计算机组成原理.doc
  6. Confluent Platform 3.0支持使用Kafka Streams实现实时的数据处理(最新版已经是3.1了,支持kafka0.10了)...
  7. xml--Schema约束
  8. 程序媛如何自我突破?
  9. JavaScript tip
  10. mybatis日期范围查询_15. Django 2.1.7 模型 条件查询、模糊查询、空查询、比较查询、范围查询、日期查询...
  11. 英国汇丰银行拒绝为客户处理加密货币交易
  12. Python--day46--mysql触发器
  13. 常用数据库分页查询SQL汇总
  14. 计算机启动硬盘自检,怎样取消电脑开机磁盘自检
  15. Tableau:树状图
  16. oracle中累计求和_oracle累计求和
  17. Floating-Point overflow and underflow
  18. 大一Web课程设计 基于HTML家乡主题网页项目的设计与实现——中国牡丹之都山东菏泽(6页)
  19. 营销革命4.0 从传统到数字
  20. C# 6 与 .NET Core 1.0 高级编程 - 41 ASP.NET MVC(上)

热门文章

  1. P2045 方格取数加强版
  2. 《Python程序设计(第3版)》[美] 约翰·策勒(John Zelle) 第 4 章 答案
  3. ORMLite框架 的使用方法---给你的数据库操作插上翅膀
  4. python基础===使用switch方法,减少使用if语句
  5. 版本控制工具Git 常用操作命令
  6. jQuery图片提示和文字提示
  7. jsp中的内置对象(9个)、作用
  8. C# 实现ADSL自动断网和拨号(适用于拨号用户)
  9. POJ3041Asteroids(二分图最少顶点覆盖)
  10. 《中国管理安全服务(MSS)市场研究报告2010》读后感