C语言 · 约数个数

算法提高 约数个数

时间限制:1.0s   内存限制:512.0MB

输入一个正整数N,输出其约数的个数。

样例输入

12

样例输出

6

样例说明

  12的约数包括:1,2,3,4,6,12。共6个。

 1 #include<stdio.h>
 2 int main(){
 3     int n;
 4     int sum=0;
 5     scanf("%d",&n);
 6     if(n==0) return 0;
 7     for(int i=1;i<=n/2;i++){
 8         if(n%i==0){
 9             sum++;
10         }
11     }
12     printf("%d",sum+1);//任何数本身为其一个约数
13 }
时间: 2024-10-12 15:41:55

C语言 · 约数个数的相关文章

hdu 4542 数论 + 约数个数相关 腾讯编程马拉松复赛

题目:http://acm.hdu.edu.cn/showproblem.php?pid=4542 小明系列故事--未知剩余系 Time Limit: 500/200 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total Submission(s): 889    Accepted Submission(s): 207 Problem Description "今有物不知其数,三三数之有二,五五数之有三,七七数之有

BZOJ 3994: [SDOI2015]约数个数和

3994: [SDOI2015]约数个数和 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 898  Solved: 619[Submit][Status][Discuss] Description 设d(x)为x的约数个数,给定N.M,求   Input 输入文件包含多组测试数据. 第一行,一个整数T,表示测试数据的组数. 接下来的T行,每行两个整数N.M. Output T行,每行一个整数,表示你所求的答案. Sample Input 2 7

【线性筛】【筛法求素数】【约数个数定理】URAL - 2070 - Interesting Numbers

素数必然符合题意. 对于合数,如若它是某个素数x的k次方(k为某个素数y减去1),一定不符合题意.只需找出这些数. 由约数个数定理,其他合数一定符合题意. 就从小到大枚举素数,然后把它的素数-1次方都排除即可. #include<cstdio> #include<cmath> using namespace std; #define MAXP 1000100 #define EPS 0.00000001 typedef long long ll; ll L,R; bool isNo

hdu1492(约数个数定理)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1492 这里先讲一下约数个数定理: 对于正整数x,将其质因分解为 x = pow(p1, a) * pow*(p2, b) * pow(p3, c) * ... 则其约数个数为:num(x) = (a+1) * (b+1) * (c+1) *... 推导: 由约数定义可知p1^a1的约数有:p1^0, p1^1, p1^2......p1^a1 ,共(a1+1)个;同理p2^a2的约数有(a2+1)个

算法:约数个数定理

约数个数定理的百度百科解释

算术基本定理 求一个数的约数个数

算术基本定理  求一个数的约数个数 算术基本定理: 分解素因数:n=(p1^k1)*(p2^k2)*...*(pn*kn).(分解方式唯一) n的约数个数为cnt(n)=(1+k1)*(1+k2)*...*(1+kn). bool isprime[maxn]; vector<int> prime; void play_prime() { memset(isprime,1,sizeof(isprime)); isprime[1]=0; for(int i=2;i<maxn;i++){ if

【BZOJ 3994】3994: [SDOI2015]约数个数和(莫比乌斯反演)

3994: [SDOI2015]约数个数和 Description 设d(x)为x的约数个数,给定N.M,求   Input 输入文件包含多组测试数据. 第一行,一个整数T,表示测试数据的组数. 接下来的T行,每行两个整数N.M. Output T行,每行一个整数,表示你所求的答案. Sample Input 2 7 4 5 6 Sample Output 110 121 HINT 1<=N, M<=50000 1<=T<=50000 Source Round 1 感谢yts199

多线程下解决最大约数个数问题的源代码

#include<iostream> #include<windows.h> #include<time.h> using namespace std; //声明素数表的数组为全局变量 int a[10000]={2,0};//素数表初始化 int flagnumber=0;//记录素数表中的个数 int minnumber=0; int maxnumber=0; //一般来说需要声明将要调用的函数 int Simple_count(int a,int b);//累除法

UVA294DIvisors(唯一分解定理+约数个数)

题目链接 题意:输入两个整数L,U(L <= U <= 1000000000, u - l <= 10000),统计区间[L,U]的整数中哪一个的正约数最多,多个输出最小的那个 本来想着用欧拉函数,打个表求所有的约数个数,但是u太大,直接暴力求解 利用唯一分解定理,刷选出根号1000000000的素数,对l,u区间的每一个数进行分解 1 #include <iostream> 2 #include <cstdio> 3 #include <algorithm