POJ2773 HAPPY 2006(不能对LL大方之战)

Java实现聚类分析Kmeans算法 聚类分析算法,Kmeans的java简单实现。 阅读详情

题目大意:就是求m的第k个(升序)与m互质的数。

思路:看了discuss才知道欧拉函数 的一个性质可以解决这道题:就是如果在[1,m]之间有cnt个数和m互质,即欧拉函数为cnt,那么在[n*m+1,(n+1)*m](n为正整数)区间内的欧拉函数也为cnt,即是有循环节。这就好办了,循环节最大才为100万,那么找到k/cnt这个区间,就可以枚举求得第K个数了。不过我写的实在很猥琐,1670ms撸过~~囧。。但是后来把LL改为int,1290ms撸过~~~囧。。以后不能大方了~~囧。。

 


AC program:

#include<iostream> 
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
using namespace std;
typedef __int64 LL; 
LL pp[100000],kg;
LL nn[100000]; 
LL ff[1000005];
void get_break(LL m)
{
  memset(pp,0,sizeof(pp));
   memset(ff,0,sizeof(ff));/// 
  LL tmp=m; 
  kg=0; 
  for(LL i=2;i*i<=tmp;)
  {
     if(m%i==0)
     {
       pp[kg]=i;
       LL cnt=0; 
       while(m%i==0)
       {
          m/=i;            
          cnt++; 
       }        
       nn[kg++]=cnt;  
     }    
     else i++;   
  }
  if(m!=1)
     {
       pp[kg]=m;
       nn[kg++]=1;     
     }      
}
LL gcd(LL a, LL b)
{
  return b?gcd(b,a%b):a;          
} 
int main()
{ 
LL m,k;
while(cin>>m>>k)
{
  if(m==1&&k==1){cout<<1<<endl;continue;}
  get_break(m);
  LL sum=1; 
  for(LL i=0;i<kg;i++) 
  {
    sum= sum*(pp[i]-1)*(int)pow(pp[i]*1.0,(nn[i]-1)*1.0);         
  }
                       // cout<<"sum   "<<sum<<endl; 
                        //n*m+1---(n+1)*m
  LL cur;
  LL newk=k%sum;
  if(newk==0){ newk=sum; cur=(k-1)/sum;}
     else  cur=k/sum;
                       //取模为0的时候就是刚好在循环节上; 
                       //cout<<"newk   "<<newk<<endl; 
  LL cnt=0; 
  for(LL i=cur*m+1;i<=(cur+1)*m;i++)
  {    
  
      if(cur>=1)
      {
         if(gcd(i,m)==1)
           cnt++;
         if(cnt==newk)//这次不是K了,法克 
           {cout<<i<<endl; break;} 
      }
      if(cur==0)
      {
         if(gcd(m,i)==1)  //m>i 
           cnt++;
         if(cnt==newk)    //注意改全 
           {cout<<i<<endl; break;} 
      }   
  }                
  
} 
return 0;} 


 

 

还有经典的二分加上容斥定理  program:(0ms秦松撸过的啊~~)

 

#include<iostream>
#include<stdio.h>
#define N 1005
using namespace std;
int n , k, K, cnt;
int mark[N + 10], prime[N];
int a[11];

void init()
{
    cnt = 0;
    for(int i = 2; i <= N; i++)
    {
        if(!mark[i])
        {
            prime[cnt++] = i;
            for(int j = 2 * i; j <= N; j += i)
            {
                mark[j] = 1;
            }
        }
    }
}

void getprime()
{
    int tmp = n;
    k = 0;
    for(int i = 0; i < cnt && prime[i] * prime[i] <= n; i++)
    {
        if(tmp % prime[i] == 0)
        {
            a[k++] = prime[i];
            while(tmp % prime[i] == 0)
            {
                tmp /= prime[i];
            }
        }
    }
    if(tmp != 1)
    {
        a[k++] = tmp;
    }
}

int judge(int num)
{
    int sum = 0;
    for(int i = 1; i < (1 << k); i++)
    {
        int tmp = 1;
        int t = 0;
        for(int j = 0; j < k; j++)
        {
            if((1 << j) & i)
            {
                t++;
                tmp = tmp * a[j];
            }
        }
        if(t % 2 == 1)
        {
            sum += num / tmp;
        }
        else
        {
            sum -= num / tmp;
        }
    }
    return num - sum;
}

int main()
{
    init();
    while(scanf("%d%d", &n, &K) != -1)
    {
        getprime();
        int l = 1, r = 1000000000, mid, ans;
        while(l <= r)
        {
            mid = (l + r) >> 1;
            int pt = judge(mid);
            if(pt >= K)
            {
                if(pt == K) ans = mid;
                r = mid - 1;
            }
            else
            {
                l = mid + 1;
            }
        }
        printf("%d\n", ans);
    }
}


 

二分的算法转载来自:http://blog.163.com/shrimp_wy/blog/static/1912435302011972611105/

                  代码来自:http://hi.baidu.com/qiusijian/item/75234371533f7346ef1e534a

 

R语言——assignment1(电视剧数据分析) 对如下数据进行描述性分析,其中包括:最大值,最小值,中位数,众数等,求表的行数、列数。 读入数据 &amp;amp;gt; mydata&amp;amp;lt;-read.csv(&amp;quot;C:\\Users\\adwar\\Desktop\\soapdata.csv&amp;quot;) 求表的行数: &amp;amp;gt; nrow(mynewdata) [1] 39 求表的列数: &amp;amp;gt; n 阅读详情

相关推荐

大象机器人myAGV移动机器人+mechArm六轴机械臂,开源复合机器人开发与实践!

我们这章节的内容是将协作性机械臂打破距离上的限制,跟移动机器人(myAGV)相连接,实现一个案例。

m0_71627844的博客 1488

网易2017秋招编程题集合

小易来到了一条石板路前,每块石板上从1挨着编号为:1、2、3……. 这条石板路要根据特殊的规则才能前进:对于小易当前所在的编号为K的 石板,小易单次只能往前跳K的一个约数(不含1和K)步,即跳到K+X(X为K的一个非1和本身的约数)的位置。 小易当前处在编号为N的石板,他想跳到编号恰好为M的石板去,小易想知道最少需要跳跃几次可以到达。 例如: N = 4,M = 24: 4->6->8->1

Achiberx 796

iPad秒变Mac副屏的隐藏技巧:用BetterDisplay实现无线竖屏+90度锁定

本文详细介绍了如何利用BetterDisplay软件突破苹果原生“随航”(Sidecar)功能的限制,将iPad无线设置为Mac的竖屏副屏,并实现90度方向锁定。通过创建虚拟显示器、配置分辨率与旋转参数,并校准鼠标指针,用户可以高效利用iPad的纵向空间进行文档阅读、编码等工作,显著提升多屏协作效率。

weixin_29266647的博客 603

四次方程根式解+四次以上方程近似解的js实现代码(下)——方程求解的核心类

跟范盛金大大不一样(我呸,我又厚颜无耻地跟大数学家比了),我在解一元高次方程方面没有加入自己的任何想法,也就是说,以下代码的实现全是抄现成的算法,因此不屑一提。如果一定要挖些亮点的话,也有,就是我会针对高次方程的一些特殊情况做了有针对性的降次,从而简化部分的运算以及减少精度的损失。如ax^4+cx^2+e=0这样的,我会先换元降到2次然后再求解。 废话不说了,类代码上完,本篇就结束了。感谢一直关...

iloveas2014的专栏 1377

Origin画图——获取论文图中数据

有时候需要已发表论文的图的数据,这里使用Origin软件取值,并且可以实现对图形再次画图。 Step 1. 打开origin软件,点击工具,图形数字化工具。 Step 2. 打开要获取数据的图片。拉动红蓝坐标,与图的坐标轴所贴合。 Step 3. 打开要获取数据的图片。拉动红蓝坐标,与图的坐标轴所贴合。 Step 3. 设置参数横轴起始坐标为300-900,纵轴为1.8-2.6. Step 4. 点击第五个手动取点,取出图中数据点。 Step 5. 依次对原图进行取点。点击项目资源查看图。

qq_42278015的博客 5183

基于树莓派5的AR头显开发:从硬件选型到Unity整合全解析

增强现实(AR)技术通过将虚拟信息叠加到真实世界,为用户提供沉浸式交互体验。其核心原理依赖于计算机视觉进行环境感知与空间定位,并结合实时3D渲染实现虚实融合。在工程实践中,嵌入式平台因其低成本、低功耗特性,成为探索AR应用边界的重要载体。本项目以树莓派5为核心,通过集成OpenCV进行ArUco标记识别实现精准空间定位,并利用MediaPipe完成手势交互,最终在Unity引擎中完成虚实场景的实时渲染与融合,为开发者提供了一个完整的、可亲手实践的AR系统开发方案。

weixin_32430941的博客 254

Ruby中 respond_to? 和 send 的用法

如同其他的OO语言一样,在ruby中,通过给对象发送消息,来完成对象的功能,比如 str.upcase ,就是给str发送upcase的消息,点操作符(.),就是用来给对象发送消息的,str接受到消息,然后执行与消息对应的功能。但是,某些时候,我们并不知道对象能响应哪些消息,比如下面的代码就会产生错误:  > obj = Object.new

在水一方 1997

从T型结到Wilkinson:5分钟搞懂功分器选型指南(附最新射频测试数据对比)

本文通过对比T型结、电阻型和Wilkinson三种功分器的核心原理与实测数据,提供了清晰的射频功分器选型指南。文章结合最新的2.4GHz ISM频段测试数据,分析了插入损耗、回波损耗和端口隔离度等关键指标,并针对窄带物联网、射频测试及合成系统等不同应用场景,给出了具体的选型建议和实战提醒,帮助工程师根据系统需求做出最优决策。

bush的博客 305

poj2773 —— 二分 + 容斥原理 + 唯一分解定理

题目链接:http://poj.org/problem?id=2773 Happy 2006 Time Limit:3000MS Memory Limit:65536K Total Submissions:12942 Accepted:4557 Description ...

alince20008的博客 256

Zemax操作41--公差分析(一)

zemax公差

lzy750750的博客 5973

YOLOv5改进策略|实战应用案例|YOLOv5苹果成熟度检测 ,准确率提升4.6%

苹果作为世界四⼤⽔果之⼀,富含多种维⽣素和矿物质,⼀直深受世界各地消费者的喜爱。据联 合国粮⻝及农业组织统计,全球⽔果产量中,苹果位列第⼆位,仅次于葡萄(贾等⼈,2020 )。然⽽,⼤多数苹果果实都是⼿⼯采摘的,这样的⽣产⽅法效率很低。此外,随着⼈⼝⽼龄化 和农村劳动⼒⼤量涌⼊城市,⽔果种植⾏业的劳动⼒成本也相应上升。所有这些因素都显着影响 着⽔果产品的市场竞争⼒。因此,实时⾼效采收苹果等⽔果,降低采收成本势在必⾏。基于机器 视觉的⽔果采摘机器⼈可以利⽤其信息感知来识别和采摘⽔果。

斌擎科技 2209

【poj2773】 Happy 2006

http://poj.org/problem?id=2773 (题目链接)题意:给出两个数m,k,要求求出从1开始与m互质的第k个数。Solution   数据范围很大,直接模拟显然是不行的,我们需要用到一些奇奇怪怪的方法。   考虑是否可以通过某些途径快速得到解,然而并没有头绪。正难则反,能不能通过计算不与m互质的数的个数来得到互质的数的个数呢?答案是可行的,我们可以运用容斥。   二分一个

MashiroSky的博客 1098

2025华为od机试真题B卷【版本管理】JavaScript实现

在 软件版本管理中,版本号由点分割的数字组成,例如 1.2.3 和 2.8。现在,你需要编写一个函数,计算两个版本号之间的可用版本号个数。这里的可用版本号指的是所有满足 version1<x<version2的版本号x的个数。若 version1 >=version2 返回0.,

MISAYAONE的博客 254

[二分+容斥原理] poj 2773 Happy 2006

题目链接: http://poj.org/problem?id=2773 Happy 2006 Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 9131   Accepted: 3073 Description Two positiv

cc_again的专栏 1123

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

POJ 2773 Happy 2006 容斥定理+二分

题意:现在给你一个m,那么从1开始与m互素的数字呈递增排列,求出第k个数字是多少? 思路:容斥+二分。二分答案找到什么时候是第k个数字即可,在一个区间【1,x】中与m互素的数字有多少个,这个不能用欧拉函数求(欧拉函数只能求【1,x】中与x互素的数字有多少个),用容斥定理就可以求出。先将m分解为素数,然后将这些素数组合的所有情况都表示出来,素数个数是奇数,就加上x/tmp,偶数就减去x/tmp;tmp为其中一些素数的最小公倍数(及乘积)。 简称奇加偶减。因为这些素数的所有组合都是确定不变的,所以直接先打个

Accepted 439

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

poj_2773_Happy 2006

Happy 2006 Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 8465   Accepted: 2784 Description Two positive integers are said to be relatively prime to each

Light_starlight 670

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

POJ 2773 Happy 2006 数学题

题目地址:http://poj.org/problem?id=2773 因为k可能大于m,利用gcd(m+k,m)=gcd(k,m)=gcd(m,k)的性质,最后可以转化为计算在[1,m]范围内的个数t。 1、AC代码: 开始的时候从1开始枚举if(gcd(n,i)==1),果断跑了2000ms #include #include #include

lamborghini1993 1107

POJ2773 Happy 2006【容斥原理】

题目大意: 给你两个整数N和K,找到第k个与N互素的数(互素的数从小到大排列),其中 (1 <= m <= 1000000,1 <= K <= 100000000 )。 解题思路: K很大,直接从小到大枚举找出不现实,只能二分答案。二分枚举[1,INF]范围内所有的数x, 找到1~x范围内与N互素的数个数,如果等于K,则就是结果。 然后考虑1~x范围内与N互素的数个数 = x - 1~x范围内与N不互素的数个数 1~x范围内与N不互素的数个数用简单的容斥定理来求即可。

程序员充电站(itcharge) 1575

POJ 2773 Happy 2006

题意:找出第k(k 先找出小于等于m的数中与m互素的数,对于大于m并且与m互素的数,都是由小于m且与m互素的数加上若干个m得到的。证明如下: 如果小于等于m且与m不互素的数,设为p,必然与m有大于1的最大公因子(设为r),p可以表示为p=r*a,m可以表示为m=r*b,其中a,b为整数,加上q个m后,p+q*m=r*(a+q*b),依然有大于1的公因子,所以p+q*m与m不互素。所以大于m并且

hexiecs的技术专栏 560

POJ-2773 Happy 2006(容斥版)

题意:给出,m和k,求第k个与m互质的数。m (1 <= m <= 1000000), K (1 <= K <= 100000000). 思路:容斥+二分,很巧妙的方法。 题目链接:http://poj.org/problem?id=2773 View Code 1 #include <iostream> 2 #include...

bancaidun1539的博客 116

poj2773 Happy 2006 二分+容斥

求第K个与M互质的数 #include #include #include #include #include #include #include #define N 10005 typedef long long LL; using namespace std; int n , K , f[128] , s , a[128] , cnt[128]; void init(

Sd_Invol的专栏 973

POJ 2773 Happy 2006(容斥原理+二分)

POJ 2773 Happy 2006(容斥原理+二分)

Dacc123的博客 927

poj 2773Happy 2006

Happy 2006 Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 10620   Accepted: 3709 Description Two positive integers are said to be relatively prime to each o

dxx_111的博客 583
上一篇: POJ2749 Sum of Consecutive Prime Numbers
下一篇: 求1亿内的素数个数
muximuxi525
博客等级 码龄15年 134粉丝 294原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值