例题 10-6 无关的元素(Irrelevant Elements, ACM/ICPC NEERC 2004, UVa1635)

2024-04-13 02:48

本文主要是介绍例题 10-6 无关的元素(Irrelevant Elements, ACM/ICPC NEERC 2004, UVa1635),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原题链接:https://vjudge.net/problem/UVA-1635
分类:基础数论
备注:唯一分解定理,递推

一开始想对每个数求出质因子的指数,然后看能不能符合条件,发现会T。看了下别人的,原来是对m的每个质因子进行判断。最近可能退步了许多,只会想暴力,应该要多换换角度来看问题,不能一根筋。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxm=1e9;
const int maxl=1e5+5;
ll n,m;
int prime[maxl],tot,vis[maxl],has[maxl],ans[maxl];
bool tag[maxl],kase;
void init(){int k=sqrt(maxm+0.5);for(int i=2;i<=k;i++)if(!vis[i]){prime[tot++]=i;for(int j=i*i;j<=n;j+=i)vis[j]=1;}
}int main(void){// freopen("in.txt","r",stdin);// freopen("out.txt","w",stdout);init();while(~scanf("%lld%lld",&n,&m)){int cnt=0,x=m;for(int i=0;i<tot;i++){if(m%prime[i]==0){has[cnt++]=prime[i];while(m%prime[i]==0)m/=prime[i];}if(m==1)break;}if(m>1)has[cnt++]=m;memset(tag,0,sizeof(tag));for(int i=0;i<cnt;i++){int t=x;int me=0, pe=0;while(t%has[i]==0){t/=has[i];me++;}//C(k,n)=(n-k+1)/k*C(k-1,n)//C(k,n-1)=(n-k)/k*C(k-1,n-1)//C(k,n-1)是第k+1个数的系数for(int k=1;k<n;k++){int up=n-k;while(up%has[i]==0){up/=has[i];pe++;}int down=k;while(down%has[i]==0){down/=has[i];pe--;}if(pe<me)tag[k+1]=1;}}tag[1]=1;int ansNum=0;for(int i=1;i<=n;i++)if(!tag[i])ans[ansNum++]=i;printf("%d\n",ansNum);for(int i=0;i<ansNum;i++)printf("%d%c",ans[i],(i==ansNum-1)?'\n':' ');if(!ansNum)printf("\n");}return 0;
}

这篇关于例题 10-6 无关的元素(Irrelevant Elements, ACM/ICPC NEERC 2004, UVa1635)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/898939

相关文章

LeetCode--220 存在重复元素 III

题目 给定一个整数数组,判断数组中是否有两个不同的索引 i 和 j,使得 nums [i] 和 nums [j] 的差的绝对值最大为 t,并且 i 和 j 之间的差的绝对值最大为 ķ。 示例 示例 1:输入: nums = [1,2,3,1], k = 3, t = 0输出: true示例 2:输入: nums = [1,0,1,1], k = 1, t = 2输出: true示例

LeetCode--217 存在重复元素

题目 给定一个整数数组,判断是否存在重复元素。如果任何值在数组中出现至少两次,函数返回 true。如果数组中每个元素都不相同,则返回 false。 示例 示例 1:输入: [1,2,3,1]输出: true示例 2:输入: [1,2,3,4]输出: false示例 3:输入: [1,1,1,3,3,4,3,2,4,2]输出: true class Solution {p

第三十七章 添加和使用自定义标题元素 - 自定义标头的继承

文章目录 第三十七章 添加和使用自定义标题元素 - 自定义标头的继承自定义标头的继承示例 在 `SOAPHEADERS` 参数中指定支持的标头元素自定义标头的继承 第三十七章 添加和使用自定义标题元素 - 自定义标头的继承 自定义标头的继承 如果创建此Web 服务的子类,该子类将继承不特定于方法的标头信息 — 包含在 <request> 或 <response> 元素中的标头信

【数据结构与算法 经典例题】使用队列实现栈(图文详解)

💓 博客主页:倔强的石头的CSDN主页               📝Gitee主页:倔强的石头的gitee主页    ⏩ 文章专栏:《数据结构与算法 经典例题》C语言                                   期待您的关注 ​​ 目录  一、问题描述 二、前置知识 三、解题思路 四、C语言实现代码 🍃队列实现代码:

秋招突击——6/22——复习{区间DP——加分二叉树,背包问题——买书}——新作{移除元素、实现strStr()}

文章目录 引言复习区间DP——加分二叉树个人实现 背包问题——买书个人实现参考实现 新作移除元素个人实现参考思路 找出字符串中第一个匹配项的下标个人实现参考实现 总结 引言 今天做了一个噩梦,然后流了一身汗,然后没起来,九点多才起床背书。十点钟才开始把昨天那道题题目过一遍,然后十一点才开始复习题目,为了不耽误下午的时间,所以这里的就单纯做已经做过的题目,主打一个有量,不在学

leetcode刷题(42)——703. 数据流中的第K大元素

设计一个找到数据流中第K大元素的类(class)。注意是排序后的第K大元素,不是第K个不同的元素。 你的 KthLargest 类需要一个同时接收整数 k 和整数数组nums 的构造器,它包含数据流中的初始元素。每次调用 KthLargest.add,返回当前数据流中第K大的元素。 示例: int k = 3;int[] arr = [4,5,8,2];KthLargest kthLar

leetcode刷题(40)——83. 删除排序链表中的重复元素

给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。 示例 1: 输入: 1->1->2 输出: 1->2 示例 2: 输入: 1->1->2->3->3 输出: 1->2->3 平时我们删除一个链表中的某个元素,一般都是以下的写法: temp.next = temp.next.next; 这样temp.next就被删除了 此题解法如下: class Solution

【Web APIs】DOM 文档对象模型 ⑤ ( 获取特殊元素 | 获取 html 元素 | 获取 body 元素 )

文章目录 一、获取特殊元素1、获取 html 元素2、获取 body 元素3、完整代码示例 本博客相关参考文档 : WebAPIs 参考文档 : https://developer.mozilla.org/zh-CN/docs/Web/APIgetElementById 函数参考文档 : https://developer.mozilla.org/zh-CN/docs/We

给定正整数n,计算出n个元素的集合{1,2,....,n}可以划分为多少个不同的非空集合

给定正整数n,计算出n个元素的集合{1,2,....,n}可以划分为多少个不同的非空集合 附源代码: #include<iostream>using namespace std;int F(int n,int m){if(n<=2)return 1;if(m==1||n==m)return 1;elsereturn F(n-1,m-1)+m*F(n-1,m);}void main(

html中的标签元素大体被分为三种不同的类型:块状元素、内联元素(又叫行内元素)和内联块状元素讲解

元素分类--块级元素 什么是块级元素?在html中<div>、 <p>、<h1>、<form>、<ul> 和 <li>就是块级元素。设置display:block就是将元素显示为块级元素。如下代码就是将内联元素a转换为块状元素,从而使a元素具有块状元素特点。 a{display:block;} 块级元素特点: 1、每个块级元素都从新的一行开始,并且其后的元素也另起一行。(真霸道,一个块级元