hdu1215七夕节(因子之和)

author author     2022-09-08     584

关键词:

题目链接:

  http://acm.hdu.edu.cn/showproblem.php?pid=1215

题目描述:

七夕节

 

Problem Description
七夕节那天,月老来到数字王国,他在城门上贴了一张告示,并且和数字王国的人们说:"你们想知道你们的另一半是谁吗?那就按照告示上的方法去找吧!"
人们纷纷来到告示前,都想知道谁才是自己的另一半.告示如下:

技术分享


数字N的因子就是所有比N小又能被N整除的所有正整数,如12的因子有1,2,3,4,6.
你想知道你的另一半吗?
 
Input
输入数据的第一行是一个数字T(1<=T<=500000),它表明测试数据的组数.然后是T组测试数据,每组测试数据只有一个数字N(1<=N<=500000).
 
Output
对于每组测试数据,请输出一个代表输入数据N的另一半的编号.
 
Sample Input
3 2 10 20
 
Sample Output
1 8 22
 

 

题目大意:

  求因子之和

思路:

  注意这里的因子不包含自身

  化成因数乘积的形式,最后化成等比数列乘积

  再模运算即可

代码:

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <cmath>
 4 #include <vector>
 5 using namespace std;
 6 
 7 const int N = 500010;
 8 
 9 struct Factor {
10     int p, e;
11     Factor(int p = 0, int e = 0) :p(p), e(e) {}
12 };
13 
14 bool not_prime[N] = { 1,1,0 };
15 vector<int> P;
16 
17 void E_prime() {
18     int m = (int)sqrt(N + 0.5);
19     for (int i = 2; i <= m; ++i)if (!not_prime[i])
20         for (int j = i*i; j < N; j += i)
21             not_prime[j] = true;
22     for (int i = 2; i < N; ++i)if (!not_prime[i])P.push_back(i);
23 }
24 
25 void Divided_by_Prime(int n, vector<Factor>& ve) {
26     double f = sqrt(n);
27     int t = 0;
28     for (int i = 0; P[i] <= f&&i < N; ++i)
29         if (n%P[i] == 0) {
30             ve.push_back(Factor(P[i], 1));
31             ++t, n /= P[i];
32             while (n%P[i] == 0) { n /= P[i]; ++ve[t - 1].e; }
33         }
34     if (!not_prime[n])ve.push_back(Factor(n, 1));
35 }
36 
37 int main() {
38     E_prime();
39     int t, n;
40     scanf("%d", &t);
41     while (t--) {
42         scanf("%d", &n);
43         vector<Factor> ve;
44         Divided_by_Prime(n, ve);
45         int sum = 1;
46         for (int i = 0; i < (int)ve.size(); ++i)
47             sum *= ((int)(pow(ve[i].p, ve[i].e + 1) + 1e-3) - 1) / (ve[i].p - 1);
48         printf("%d
", sum - n);
49     }
50 }

 







七夕节hdu-1215(唯一分解素数筛法因子之和加强版)(代码片段)

七夕节HDU-1215题目链接:https://vjudge.net/problem/HDU-1215#author=0题目:七夕节那天,月老来到数字王国,他在城门上贴了一张告示,并且和数字王国的人们说:"你们想知道你们的另一半是谁吗?那就按照告示上的方法去找吧!"人们纷纷来到告... 查看详情

hdu-1215七夕节

...的所有因子和。解题思路:暴力找出所有因子求和题目:七夕节TimeLimit:2000/1000MS(Java/Others)    MemoryLimit:65536/32768K(Java/Others)TotalSu 查看详情

hdu1215.七夕节筛选法7月26

七夕节七夕节那天,月老来到数字王国,他在城门上贴了一张告示,而且和数字王国的人们说:"你们想知道你们的还有一半是谁吗?那就依照告示上的方法去找吧!"人们纷纷来到告示前,都想知道谁才是自己的还有一半.告演示样... 查看详情

hdu1215七夕节-(埃氏筛+唯一分解定理)(代码片段)

七夕节TimeLimit:2000/1000MS(Java/Others)    MemoryLimit:65536/32768K(Java/Others)TotalSubmission(s):56666    AcceptedSubmission(s):18239ProblemDescription七夕节那天,月老来到数字王国,他在城门上贴了一张告示,并且和数字王国的人... 查看详情

hdu1215七夕节

七夕节TimeLimit:2000/1000MS(Java/Others)    MemoryLimit:65536/32768K(Java/Others)TotalSubmission(s):47104    AcceptedSubmission(s):15117ProblemDescription七夕节那天,月老来 查看详情

hdu1215七夕节

对于每个数我们筛一下它的因数,但是不能用O(N)的算法一个一个去筛。而要用O($sqrt{N}$)算法筛。和上道欧拉函数的题目同一个思想。#include<cstdio>#include<algorithm>intT;intx;intmain(){scanf("%d",&T);while(T--){intans=0;scanf("%d",&x);... 查看详情

hdu1215(代码片段)

HDU1215七夕节思路:求一个数的约数和。一:打表#include<cmath>#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>usingnamespacestd;constintmaxn=5e5+10;intsum[maxn];voidinit 查看详情

hdu1215求约数和唯一分解定理的基本运用

...tp://acm.hdu.edu.cn/showproblem.php?pid=1215题意:求解小于n的所有因子和利用数论的唯一分解定理。若n=p1^e1*p2^e2*……*pn^en(任何一个数都可以分解成素数乘积) 则n的因子个数为 (1+e1)(1+e2)……(1+en) n的各个因子的和为(1+p1+p1^2+…... 查看详情

hdoj_1215_七夕节(代码片段)

AC代码:#include<iostream>#include<cstdio>#include<cmath>usingnamespacestd;longinthanshu(longinta)longintsum=1;longintbi=(int)sqrt((double)a);for(longinti=2;i<=bi;i++)if(a%i==0)su 查看详情

第四场hdu6069countingdivisors(逆向思维)

...edu.cn/showproblem.php?pid=6069题目大意:求i从l到r中i的k次方的因子数之和。解题思路:我们可以知道一个数有因子,则这个数的因子一定是若干个质数因子排列组合得到的。我们首先要得到10^6中的素数,然后它的因子数量是相同质... 查看详情

hdu6069countingdivisors

题意:给出求L,R之间的数的K次方的因子数之和 思路:打表求出1~10^6之间的素数,枚举[L,R]之间素数的倍数,然后按算数基本定理求出因子个数和。处理过后[L,R]之间的数要么是1,要么是一个素数,再次根据算数基本定理计算... 查看详情

hdu1021(斐波那契数与因子3**)(代码片段)

题意是说在给定的一种满足每一项等于前两项之和的数列中,判断第n项的数字是否为3的倍数。斐波那契数在到第四十多位的时候就会超出int存储范围,但是题目问的是是否为3的倍数,也就是模3值为0,考虑到余数只有0,1,2,... 查看详情

hdu-5514frogs(容斥原理)

...青蛙,可以跳到的石头编号是gcd(ai,m)的倍数。2、枚举m的因子,若某个青蛙可以弹跳的石头编号中有该因子,那证明编号为这个因子的石头一定会被跳到,vis[i]=1。3、num[i]记录编号为i的石头被跳了几次,如果被跳的次数不等于应... 查看详情

完数[hdu1406]

完数TimeLimit:2000/1000MS(Java/Others)MemoryLimit:65536/32768K(Java/Others)TotalSubmission(s):27275AcceptedSubmission(s):10213 ProblemDescription完数的定义:如果一个大于1的正整数的所有因子之和等于它的本身,则称这个数是完数,比如6,28都是完数:6 查看详情

4c-七夕节(代码片段)

七夕节那天,月老来到数字王国,他在城门上贴了一张告示,并且和数字王国的人们说:"你们想知道你们的另一半是谁吗?那就按照告示上的方法去找吧!" 人们纷纷来到告示前,都想知道谁才是自己的另一半.告示如下: 数字N的因... 查看详情

hdu1999不可摸数(代码片段)

s(n)是正整数n的真因子之和,即小于n且整除n的因子和.例如s(12)=1+2+3+4+6=16.如果任何 数m,s(m)都不等于n,则称n为不可摸数. Input包含多组数据,首先输入T,表示有T组数据.每组数据1行给出n(2<=n<=1000)是整数。Output如果n是不... 查看详情

自然因子之和数学

【题目描述】两个自然数A和B.求A^B自然因子的总和。结果对9901取模输出【输入】两个自然数A和B,空格隔开。【输出】输出:和对9901取模的值。【输入样例】23【输出样例】15【样例解释】2^3=8自然因子8是:1、2、4、8。他们的sum是15... 查看详情

求一个数的因子之和(代码片段)

直接求解LLfactor(LLx) LLcnt=0; for(inti=1;i<=sqrt(x);i++) if(x%i==0) if(x/i==i)cnt+=i;//ex:9=3*3 elsecnt+=i+x/i; returncnt;筛法LLsum[MS];voidfactor_sieve()//sum[i]记录数i的各个因子之和 for(inti=1;i& 查看详情