等差数列
题目大意
数学老师给小明出了一道等差数列求和的题目。
但是粗心的小明忘记了一部分的数列,只记得其中 N N N 个整数。
现在给出这 N N N 个整数,小明想知道包含这 N N N 个整数的最短的等差数列有几项?
输入格式
输入的第一行包含一个整数 N N N。
第二行包含 N N N 个整数 A 1 , A 2 , ⋅ ⋅ ⋅ , A N A_1,A_2,⋅⋅⋅,A_N A1,A2,⋅⋅⋅,AN。(注意 A 1 ∼ A N A_1∼A_N A1∼AN 并不一定是按等差数列中的顺序给出)
输出格式
输出一个整数表示答案。
数据范围: 2 ≤ N ≤ 100000 2≤N≤100000 2≤N≤100000, 0 ≤ A i ≤ 1 0 9 0≤A_i≤10^9 0≤Ai≤109
输入样例
5
2 6 4 10 20
输出样例
10
样例解释:包含 2、6、4、10、20 的最短的等差数列是 2、4、6、8、10、12、14、16、18、20。
从第二项开始每一项与第一项的差一定是公差的倍数。
#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn = 1e5 + 7;
int a[maxn],b[maxn];
int main()
{
int n, x, d = 0;
scanf("%d",&n);
for(int i = 1; i <= n; i++) scanf("%d",&a[i]);
sort(a + 1, a + 1 + n); //排序
//求后面每一项与首项的差值的最大公约数
for(int i = 2; i <= n; i++) d = __gcd(d, a[i] - a[1]);
if(!d) printf("%d\n",n); //公差为 0
else printf("%d\n",(a[n]-a[1])/d+1); //公差不为0
return 0;
}
X的因子链
题目大意
输入正整数 X X X,求 X X X 的大于 1 的因子组成的满足任意前一项都能整除后一项的严格递增序列的最大长度,以及满足最大长度的序列的个数。
输入格式
输入包含多组数据,每组数据占一行,包含一个正整数表示 X X X。
输出格式
对于每组数据,输出序列的最大长度以及满足最大长度的序列的个数。
每个结果占一行。
数据范围: 1 ≤ X ≤ 220 1≤X≤220 1≤X≤220
输入样例
2
3
4
10
100
输出样例
1 1
1 1
2 1
2 2
4 6
#include <cstdio>
using namespace std;
typedef long long ll;
const int maxn = (1<<20) + 10;
int primes[maxn];
bool st[maxn];
int minp[maxn];
int sum[maxn],cnt;
void get_primes(int x)
{
for(int i = 2; i <= x; i++)
{
if(!st[i])
{
primes[cnt++] = i;
minp[i] = i; //存最小质因子
}
for(int j = 0; primes[j] <= x/i; j++)
{
int t = primes[j]*i;
minp[t] = primes[j];
st[t] = true;
if(i%primes[j] == 0) break;
}
}
}
int main()
{
get_primes(maxn);
int x, fact[30]; //fact[] 存最小质因子
while(~scanf("%d",&x))
{
int tot = 0, p, idx = 0; //tot: 质因子总出现次数
while(x > 1)
{
p = minp[x], sum[idx] = 0, fact[idx] = p;
while(x%p == 0) sum[idx]++, x/=p, tot++;
++idx; //下标
}
ll res = 1;
for(int i = 2; i<= tot; i++) res *= i;
for(int i = 0; i < idx; i++)
for(int j = 1; j <= sum[i]; j++) res /= j;
printf("%d %lld\n",tot,res);
}
return 0;
}
聪明的燕姿
题目大意
城市中人们总是拿着号码牌,不停寻找,不断匹配,可是谁也不知道自己等的那个人是谁。
可是燕姿不一样,燕姿知道自己等的人是谁,因为燕姿数学学得好!
燕姿发现了一个神奇的算法:假设自己的号码牌上写着数字 S S S,那么自己等的人手上的号码牌数字的所有正约数之和必定等于 S S S。
所以燕姿总是拿着号码牌在地铁和人海找数字(喂!这样真的靠谱吗)。
可是她忙着唱《绿光》,想拜托你写一个程序能够快速地找到所有自己等的人。
输入格式
输入包含 k k k 组数据。
对于每组数据,输入包含一个号码牌 S S S。
输出格式
对于每组数据,输出有两行。
第一行包含一个整数 m m m,表示有 m m m 个等的人。
第二行包含相应的 m m m 个数,表示所有等的人的号码牌。
注意:你输出的号码牌必须按照升序排列。
数据范围: 1 ≤ k ≤ 100 , 1 ≤ S ≤ 2 × 1 0 9 1≤k≤100,1≤S≤2×10^9 1≤k≤100,1≤

最低0.47元/天 解锁文章
247

被折叠的 条评论
为什么被折叠?



