关闭

lightOJ 1278 Sum of Consecutive Integers(数论,数学推导)

标签: lightOJ
703人阅读 评论(2) 收藏 举报
分类:

题目:给出一个数n,求出有多少种连续整数和等于n(连续整数至少两个)。“For example, N = 15 has three solutions, (1+2+3+4+5), (4+5+6), (7+8).”

分析:n=a+(a+1)+(a+2)+(a+3)+……+(a+k-1) ==> n=(2a+k-1)/2*k ==>2n/k-k=2a-1 ==>2n/k-k是一个奇数。如果k是一个偶数,那么2n/k必是奇数,偶数/偶数=奇数,所以答案和奇因子的个数相关,如n=2*3^2*5^2.那么k可以取2和g(3),g(5)的组合乘积(一定要有2,3和5至少有一个),其中g(3)=3^0,3^1,3^2,g(5)=5^0,5^1,5^2。但是g(3)和g(5)不能同时取1.所以结果为C(3,1)*C(3,1)-1=8;按照相同的思路,如果k是一个奇数,那么2n/k必是一个偶数,偶数/奇数=偶数,那么k对应消除n的除2外的其他素因子(严格的说是其他素因子的组合),还以上一个例说明:k可以取g(3),g(5)的组合乘积,结果同为C(3,1)*C(3,1)-1。最后总结,对于n=2^a1*3^a2*5^a3*7^a4*---*pri^an,计算结果就是(a2+1)(a3+1)(a4+1)*--*(an+1)-1。

#include <iostream>
#include<cstdio>
using namespace std;
typedef long long LL;
const int maxn=1e7+5,maxn2=7e5;
int pri[maxn2];   
bool tag[maxn];
int top=0;
void getpri(){
	for(int i=2;i<maxn;i++){
		if(!tag[i])pri[top++]=i;
		for(int j=0;j<top&&i*pri[j]<maxn;j++){
			tag[i*pri[j]]=1;
			if(i%pri[j]==0)break;
		}
	}
} 
int main(int argc, char *argv[]) {
	//freopen("cin.txt","r",stdin);
	int n,i,j;
	LL t;
	getpri();
	while(cin>>n){
		for(i=1;i<=n;i++){
			scanf("%lld",&t);
			LL tmp=t,ans=1;
			int po=0;
			while(tmp%2==0){
				tmp/=2;
			}
            for(j=1;j<top&&pri[j]<=tmp;j++){
            	if(tmp%pri[j]==0){
            		po=1;
            		tmp/=pri[j];
            	    while(tmp%pri[j]==0){
            		    po++;
            		    tmp/=pri[j];
            	    }
            	    ans=ans*(po+1);
				}
            }
            if(tmp>1)ans*=2;  //有大于10^7的素因子出现,且一定只有一个. 
			printf("Case %d: %lld\n",i,ans-1);			
		}
	}
	return 0;
}




0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

中国大学MOOC-陈越、何钦铭-数据结构-2015秋 01-复杂度2 Maximum Subsequence Sum (25分)

01-复杂度2 Maximum Subsequence Sum   (25分) Given a sequence of K integers { N​1​​, N​2​​, ..., N​K​...
  • fjinhao
  • fjinhao
  • 2015-09-02 21:30
  • 2496

Leetcode解题笔记(Array)

源码见github https://github.com/Kelvinmao/Leetcode/tree/master/Array 2016-08-08更新154.Find Minimum in Ro...
  • kelvinmao
  • kelvinmao
  • 2016-07-23 22:38
  • 1567

GAN学习笔记(一)——初探GAN

本文基于2014年的经典论文:Generative Adversarial Networks 论文下载地址:https://arxiv.org/abs/1406.2661一、感性认识 GAN的任务...
  • sallyxyl1993
  • sallyxyl1993
  • 2017-03-20 14:01
  • 2078

hdu 1231, dp ,maximum consecutive sum of integers, find the boundaries, possibly all negative, C++

hdu 1231, maximum consecutive sum of integers, finding the boundaries, possibly all negative, C++
  • qeatzy
  • qeatzy
  • 2015-07-12 03:24
  • 519

POJ2739-Sum of Consecutive Prime Numbers

  • 2011-07-29 01:26
  • 6KB
  • 下载

LightOJ 1269 Consecutive Sum(字典树)

题意: 给定一个序列,求选定一段区间的亦或和最大值和最小值。 解析: 由于是区间问题,很容易就能想到是要先求前缀异或和。 可以对所有前缀和建立字典树,节点的末尾保存二进制转化成十进制的值...
  • HelloWorld10086
  • HelloWorld10086
  • 2015-08-09 20:48
  • 385

[LightOJ 1269] Consecutive_Sum (Trie树妙用)

LightOJ - 1269 题意是给你一个序列,求子序列区间异或起来的最大值和最小值 首先可以利用类似前缀和的形式预处理一下,inpt[i]^=inpt[i-1] 然后一段区间[l,r]的异或...
  • u012015746
  • u012015746
  • 2016-04-07 20:39
  • 193

POJ 2739 Sum of Consecutive Prime Numbers(素数表的应用)

原题地址http://poj.org/problem?id=2739 题意:某些数字可以由连续几个素数的和表示,给定一个数字,求其有几种这样的表示方法。例:41=2+3+5+7+11+13 或 4...
  • lecholin
  • lecholin
  • 2017-03-28 21:48
  • 136

poj 2739 Sum of Consecutive Prime Numbers

题目大意:给出一个素数,求
  • u010018629
  • u010018629
  • 2014-04-06 11:03
  • 443

C - Sum of Consecutive Prime Numbers(1.2.2)

C - Sum of Consecutive Prime Numbers(1.2.2) Time Limit:1000MS    Memory Limit:65536KB    64bit IO F...
  • u014552726
  • u014552726
  • 2014-07-13 15:25
  • 637
    个人资料
    • 访问:327280次
    • 积分:8806
    • 等级:
    • 排名:第2521名
    • 原创:574篇
    • 转载:13篇
    • 译文:0篇
    • 评论:36条
    我的链接
    最新评论