C++ 算法优化-具有n个除数的最小数
此问题是来自的编程版本 三角形数序列是通过添加自然数生成的。所以第7个三角形的数字是1+2+3+4+5+6+7=28。前十个任期为:C++ 算法优化-具有n个除数的最小数,c++,algorithm,C++,Algorithm,此问题是来自的编程版本 三角形数序列是通过添加自然数生成的。所以第7个三角形的数字是1+2+3+4+5+6+7=28。前十个任期为: 1,3,6,10,15,21,28,36,45,55,... 第28个三角形将具有以下因素 28 = 1,2,4,7,28 我们可以看到28是第一个有超过五个除数的三角形数 第一个超过N个除数的三角形数的值是多少 1如果我告诉你938839这个数字有多少个除数,938840这个数字有多少个除数,你会如何利用我给你的信息找出938839*938840的除数 你怎
1,3,6,10,15,21,28,36,45,55,...
第28个三角形将具有以下因素
28 = 1,2,4,7,28
我们可以看到28是第一个有超过五个除数的三角形数
第一个超过N个除数的三角形数的值是多少
1如果我告诉你938839这个数字有多少个除数,938840这个数字有多少个除数,你会如何利用我给你的信息找出938839*938840的除数
你怎么能用这个想法让你的算法运行快100倍呢 为什么会出现这种未格式化的blob?@Deduplicator-formatting不正是projecteuler的真正乐趣吗?你自己想得到最好的算法吗?把公式写在一张纸上,开始用不同的形式表达出来。你可能会有一个这样的heureka时刻。@stefan从过去5个小时以来,我一直在使劲敲我的头,我想不出一个公式。@user3098272那么你可以先解决另一个问题,等你获得更多的知识或者头脑清醒后再回到这个问题上来。相信我:欧拉计划很有趣,但在网上寻求帮助会毁了它。两件小事:你真的应该改进格式,这让你作为一个开发者的生活变得不必要的艰难。第二:不要使用宏来定义类型名。写typedef long long LL;相反使用起来更安全。这不是答案。请在问题之后发表评论。@wallyk:不,这比直接回答好。edited:我觉得这不是一个真正的答案。我没有意识到留下的评论会说我认为这是一个具体的批评或要求额外的信息,这显然不是。这显然是一个指向答案方向的指针。@wallyk:我相信,对于Euler项目的问题,在这个网站上给出提示而不是完整的答案是可以接受的。@neminem:严格来说,这不是答案。您可能会发现一条规则,规定应该将其迁移到注释中。但那是愚蠢的。人们解决Project Euler问题不是因为这是他们的工作,也不是因为这是通往他们真正想做的事情的路上的一些技术挑战;相反,他们解决体育问题是为了学习一些东西或磨练他们解决问题的技能。直截了当的回答会让人失望。
#include <iostream>
#include <stdio.h>
#include <vector>
#define LL long long
using namespace std;
int main()
{
int test;
scanf("%d",&test);
int v[10001]={0};
int tnum=1,num=1;
while(1)
{
int c=0;
for(int i=1;i*i<=tnum;++i)
{
if(tnum%i==0)
{
++c;
if(i!=(tnum/i))
{
++c;
}
}
}
if(v[c]==0)
v[c]=tnum;
// cout << "c = "<<c<<" tnum = " << tnum << endl;
if(c>1000)
{
break;
}
++num;
tnum += num;
}
while(test--)
{
int n;
scanf("%d",&n);
++n;
while(v[n]==0)
{
++n;
}
printf("%d\n",v[n]);
}
return 0;
}