2016huasacm暑假集训训练四 数论_B
2024-10-15 22:37:10
题目链接:https://vjudge.net/contest/125308#problem/G
题意:求有多少x(1<=x<=n),使得gcd(x,n)>=m; 先求n的所有大于等于m的因子, 刚开始用了模拟,超时,看了下往上的题解,说要用到欧拉函数求解,就看了下欧拉函数, ans=∑phi[n/ei];phi[i]为欧拉函数,为不大于i且与i互质的正整数个数 对于一个与ei互质且小于等于n/ei的正整数p来说,p*ei<=n,gcd(p*ei,n)=ei;则phi[n/ei]就是1~n中的与n最大公约数是ei的个数。而n与1~n的最大公约数必定是n的因子。 所以符合gcd(x,n)>=m的x为n所有大于等于m因子的倍数,用phi即可避免重复。
那么此题就很容易解了
AC代码:
#include <stdio.h>
#define size 1000000
int a[size]; int P( int n )
{
int ans = n;
for( int i = ; i*i <= n ; i++ )
{
if( n%i== )
{
ans = ans / i * (i-);
while( n%i== )
n /= i;
}
}
if(n>)
ans = ans / n * (n-);
return ans;
} int main()
{ int t , n , m , t1 , ans;
scanf("%d",&t);
while( t-- )
{
scanf("%d%d",&n,&m);
t1 = ans = ;
for( int i = ; i*i<=n ; i++ )
{
if( n%i == )
{
if(i*i==n)
a[t1++] = i;
else
{
a[t1++] = i;
a[t1++] = n/i;
}
}
}
for( int i = ; i<t1 ; i++ )
{
if( a[i]>=m )
{
ans += P( n/a[i] );
}
}
printf("%d\n",ans);
}
return ;
}
最新文章
- 你真的了解UITabBarController吗?
- C和指针 第十三章 习题
- .gitignore失效问题解决
- 深入探讨 java.lang.ref 包
- JSON、使用JSON进行数据交换的基础和原理
- MySQL数据丢失情况分析
- html&;css静态页面
- android 写文件权限
- mp3播放器
- MapReduce常见算法
- .NET Core阿里大于短信发送SDK修改以及使用
- 安卓---RedioButton(单选按钮)、CheckBox(复选按钮)
- asp.net core1.1的PlatformAbstraction源码
- 聚合函数对NULL统计
- 安装yii2 需要token 记录
- m文件转换c代码
- springboot的小知识总结
- 洛谷.3224.[HNOI2012]永无乡(Splay启发式合并)
- 秒懂,Java 注解 (Annotation)你可以这样学
- 缓慢变化维 (Slowly Changing Dimension) 常见的三种类型及原型设计(转)
热门文章
- PAT mooc DataStructure 4-2 SetCollection
- ZOJ 3696 Alien&#39;s Organ
- setTimeout和setInterval的注意事项
- HFS远程命令执行漏洞入侵抓鸡黑阔服务器
- Ubuntu 使用phpmyadmin,报错#1146 - Table ‘phpmyadmin.pma_table_uiprefs&#39; doesn&#39;t exist
- ACM/ICPC 之 ACM计算机工厂-EK算法(POJ3436)
- webstorm抽取函数
- 使用jquery实现单选框、多选框取消选中状态
- IIS7.5 平台.NET无后缀名伪静态实现办法-服务器配置
- caffe下训练时遇到的一些问题汇总